Tito
Tito

Reputation: 2300

C++ finding uint8_t in vector<uint8_t>

I have the following simple code. I declare a vector and initialize it with one value 21 in this case. And then i am trying to find that value in the vector using find. I can see that the element "21" in this case is in the vector since i print it in the for loop. However why the iterator of find does not resolve to true?

vector<uint8_t> v =  { 21 };
uint8_t valueToSearch = 21;


for (vector<uint8_t>::const_iterator i = v.begin(); i != v.end(); ++i){
    cout << unsigned(*i) << ' ' << endl;
}


auto it = find(v.begin(), v.end(), valueToSearch);
if ( it != v.end() )
{
    string m = "valueToSearch was found in the vector " + valueToSearch;
    cout << m << endl;

}

Upvotes: 1

Views: 851

Answers (1)

crsn
crsn

Reputation: 609

are you sure it doesn't work?

I just tried it:

#include<iostream> // std::cout
#include<vector> 
#include <algorithm>

using namespace std;

int main()
{
    vector<uint8_t> v =  { 21 };
    uint8_t valueToSearch = 21;


    for (vector<uint8_t>::const_iterator i = v.begin(); i != v.end(); ++i){
        cout << unsigned(*i) << ' ' << endl;
    }


    auto it = find(v.begin(), v.end(), valueToSearch);
    if ( it != v.end() )
    {// if we hit this condition, we found the element
        string error = "valueToSearch was found in the vector ";
        cout << error <<  int(valueToSearch) << endl;

    }

    return 0;
}

There are two small modifications:

  • in the last lines inside the "if", because you cannot add directly a number to a string:

    string m = "valueToSearch was found in the vector " + valueToSearch;

and it prints:

21 
valueToSearch was found in the vector 21
  • while it's true that you cannot add a number to a string, cout support the insertion operator (<<) for int types, but not uint8_t, so you need to convert it to it.

    cout << error << int(valueToSearch) << endl;

This to say that the find is working correctly, and it is telling you that it found the number in the first position, and for this, it != end (end is not a valid element, but is a valid iterator that marks the end of your container.)

Try it here

Upvotes: 1

Related Questions