繁体   English   中英

使用 vector<>::iterator 时查找索引

[英]Finding the index when using a vector<>::iterator

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

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);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM