Search code examples
c++vectorindexingiteratordistance

C++ turn vector iterator into index


I've got a question. I have a vector that contains tuples:

vector<tuple<int, int> > my_vector

Let's say I want to turn my for loop iterator in an index for whatever reason:

// Example program
#include <vector>
#include <tuple>

using namespace std;

int main()
{        
    vector<tuple<int, int> > my_vector;
    my_vector.push_back(make_tuple(1, 1));
    my_vector.push_back(make_tuple(2, 2));
    my_vector.push_back(make_tuple(3, 3));

    for (auto iterator : my_vector)
    {
        size_t index = distance(my_vector.begin(), iterator);
    }       
}

I honestly do not understand what I have to change to get it running. The problems seems to be my use of the iterator in distance. Maybe somebody can give me some advice.


Solution

  • The range-based for loop

    for (range_declaration : range_expression) 
        loop_statement
    

    is roughly equivalent to this code:

    for (auto begin = range_expression.begin(), end = range_expression.end(); 
         begin != end; ++begin)
    {
        range_declaration = *begin;
        loop_statement
    } 
    

    Note the * operator. So, range_declaration is not the iterator, but an element, it points to.

    If you need an index, use plain for loop:

    for (std::size_t index = 0; index < my_vector.size(); ++index)
         loop_statement