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

2Ni*_*meo 2 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 = ...
}
Run Code Online (Sandbox Code Playgroud)

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

ild*_*arn 10

myIndex = iter - myStringVec.begin();
Run Code Online (Sandbox Code Playgroud)

要么

myIndex = std::distance(myStringVec.begin(), iter);
Run Code Online (Sandbox Code Playgroud)

还要注意,要便携(并且可能消除编译器警告),myIndex应该是类型std::vector<std::string>::difference_type而不是int.


Jer*_*fin 5

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