Hey, if you can get a more descriptive tittle please edit it.
I’m writing a little algorithm that involves checking values in a matrix.
Let’s say:
char matrix[100][100];
char *ptr = &matrix[0][0];
imagine i populate the matrix with a couple of values (5 or 6) of 1, like:
matrix[20][35]=1;
matrix[67][34]=1;
How can I know if the binary value of an interval of the matrix is zero, for example (in pseudo code)
if((the value from ptr+100 to ptr+200)==0){ ... // do something
I’m trying to pick up on c/c++ again. There should be a way of picking those one hundred bytes (which are all next to each other) and check if their value is all zeros without having to check on by one.(considering char is one byte)
You can use std::find_if.
You can also use binders to remove the free function (although I think binders are hard to read):
Dang, I just notice request not to do this byte by byte. find_if will still do byte by byte although it’s hidden. You will have to do this 1 by 1 although using a larger type will help. Here’s my final version.
What this does is first checks to see if the data is long enough to make it worth the more complex algorithm. I’m not 100% sure this is necessary but you can tune what is the minimum necessary.
Assuming the data is long enough it first aligns the begin and end pointers to match the alignment of the type used to do the comparisons. It then uses the new type to check the bulk of the data.
I would recommend using: