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.
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