2

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

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()

4

3 回答 3

10
myIndex = iter - myStringVec.begin();

或者

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

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

于 2012-04-10T22:19:05.093 回答
5

您可以使用std::distance, 或减法。std:distance具有在不提供随机访问的迭代器上工作的优势(但使用专门化为随机访问迭代器提供恒定时间的距离)。

于 2012-04-10T22:20:49.130 回答
4

你可以这样做:

if(someFunction(*iter))  //got a hit on this string
{
   myIndex = std::distance(myStringVec.begin(), iter);
}
于 2012-04-10T22:20:29.700 回答