使用向量时查找索引<>::迭代器

Finding the index when using a vector<>::iterator

本文关键字:lt 迭代器 gt 索引 向量 查找      更新时间:2023-10-16

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

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

myIndex = iter - myStringVec.begin();

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

另请注意,要具有可移植性(并可能消除编译器警告),myIndex 的类型应为 std::vector<std::string>::difference_type 而不是 int

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

你可以这样做:

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