使用向量<> :: iterator时查找索引

时间:2012-04-10 22:17:48

标签: c++

我想知道是否有办法获取随机访问迭代器的索引。例如:

int myIndex = -1;
for(std::vector<std::string>::iterator iter = myStringVec.begin();
    iter != myStringVec.end();
    iter++)
{
  if(someFunction(*iter))  //got a hit on this string
    myIndex = ...
}

请原谅,如果这是超级琐事。一个显而易见的解决方案是按索引进行迭代,但我的想法是考虑随机访问迭代器,迭代器可能有一种方法告诉你它的索引是什么,比如myIndex = iter.index()

3 个答案:

答案 0 :(得分:10)

myIndex = iter - myStringVec.begin();

myIndex = std::distance(myStringVec.begin(), iter);

另请注意,为了便于移植(并且可能消除编译器警告),myIndex应为std::vector<std::string>::difference_type类型,而不是int

答案 1 :(得分:5)

您可以使用std::distance或减法。 std:distance的优点是可以处理不提供随机访问的迭代器(但使用特化来为随机访问迭代器提供恒定时间的距离)。

答案 2 :(得分:4)

你可以这样做:

if(someFunction(*iter))  //got a hit on this string
{
   myIndex = std::distance(myStringVec.begin(), iter);
}