将迭代器分配给每个循环的std :: vector in的当前元素

时间:2016-06-22 14:35:21

标签: c++ vector foreach iterator

我有一个循环遍历向量中的每个元素的循环,并且对于循环的每次迭代,我希望能够开始从当前元素开始的迭代器。我试过了

// TypeVect is a std::vector of type Type
for (Type &element : TypeVect)
{
    std::vector<Type>::iterator it;
    it = &element;
    // ...
}

假设迭代器将被分配给当前元素的地址,但我收到错误:

  

no operator =匹配这些操作数...输入*

我无法弄清问题是什么。有什么建议?我可以使用索引处理我的问题,但我只是对这种特殊情况感到好奇。

2 个答案:

答案 0 :(得分:2)

基于范围的循环语法存在的原因是它简化了遍历范围/容器/跨度一次的普通循环。

你想要的循环是非常重要的。使用基于范围的语法编写该循环将比旧的学校索引或基于迭代器的循环更复杂。这违背了使用基于范围的循环的目的。

那就是说,如果我们允许自己变得愚蠢,就可以在基于范围的循环中获得迭代器:

std::vector<Type>::iterator it = TypeVect.begin() + (&element - TypeVect.data());
  

假设迭代器将被分配给当前元素的地址,但我收到错误&#34; no operator =匹配这些操作数...类型*&#34;我无法弄清楚问题是什么。

你的假设是错误的。您不能将元素的地址分配给std::vector<Type>::iterator类型的变量。问题是指针是与迭代器不同的类型,而不是可转换的。

答案 1 :(得分:1)

除了直接遍历iterator

之外,我没有看到任何其他选项
vector<Type> TypeVect;
// ...
for (vector<Type>::iterator it = TypeVect.begin() ; it != TypeVect.end() ; it++)
{
    Type & element = *it;
    // ...
}