首页 > 解决方案 > C++ 将向量迭代器变成索引

问题描述

我有个问题。我有一个包含元组的向量:

vector<tuple<int, int> > my_vector

假设无论出于何种原因,我都想将我的 for 循环迭代器转换为索引:

// 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);
    }       
}

老实说,我不明白我必须改变什么才能让它运行。问题似乎是我在distance. 也许有人可以给我一些建议。

标签: c++vectorindexingiteratordistance

解决方案


基于范围的for循环

for (range_declaration : range_expression) 
    loop_statement

大致相当于这段代码:

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

注意*操作员。所以,range_declaration它指向的不是迭代器,而是一个元素。

如果您需要索引,请使用普通for循环:

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

推荐阅读