How to convert vector iterator to int in C++

前端 未结 3 1787
暗喜
暗喜 2021-02-04 00:53

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 :

相关标签:
3条回答
  • 2021-02-04 01:18

    You just dereference the iterator like this

    index = *it;
    

    However you should first see if you actually found something

    it = find(myvector.begin(), myvector.end(), x);  
    if (it != myvector.end())
    {
        index = *it;
    }
    

    To find the index in that the match was found, you can use subtraction of the found pointer from the start of the vector.

    it = find(myvector.begin(), myvector.end(), x);  
    if (it != myvector.end())
    {
        index = it - myvector.begin();  // Index from start of vector
    }
    

    Also, hopefully in your actual code you defined x, as in the snippet you showed x is uninitialized so this will result in undefined behavior.

    0 讨论(0)
  • 2021-02-04 01:19

    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.

    0 讨论(0)
  • 2021-02-04 01:32

    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.

    0 讨论(0)
提交回复
热议问题