Reputation: 7164
I am looking for an element in a C++ vector, and when I find it, I want to get found element's index in a numerical form(integer, float).
My naive attempt is this :
int x;
int index;
vector<int> myvector;
vector<int>::iterator it;
it = find(myvector.begin(), myvector.end(), x);
index = (int) * it;
This code is giving error. Can you tell me how I can convert iterator to int(if possible), or can you tell me how I can get found element's index in other way? Thanks.
Upvotes: 35
Views: 85221
Reputation: 254651
If you want the index of the found element, then that's the distance from the start of the sequence:
index = it - myvector.begin();
or, since C++11,
index = std::distance(myvector.begin(), it);
which will work with any forward iterator type, not just random-access ones like those from a vector.
Upvotes: 17
Reputation: 311078
You need to use standard function std::distance
index = std::distance( myvector.begin(), it );
if ( index < myvector.size() )
{
// do something with the vector element with that index
}
Try always to use std::distance
even with random access iterators. This function is available in the new and old C++ Standards.
Upvotes: 58