jason
jason

Reputation: 7164

How to convert vector iterator to int in C++

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

Answers (2)

Mike Seymour
Mike Seymour

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

Vlad from Moscow
Vlad from Moscow

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

Related Questions