簡體   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