我想知道是否有办法获取随机访问迭代器的索引。例如:
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()
答案 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);
}