2012-04-10 38 views
2

我想知道是否有辦法獲得隨機訪問迭代器的索引。例如:使用向量時尋找索引<> :: 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()

回答

10
myIndex = iter - myStringVec.begin(); 

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

還要注意的是可移植的(也可能消除編譯器警告),myIndexstd::vector<std::string>::difference_type類型而不是int的。

4

你可以這樣做:

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

您可以使用std::distance,或減法。 std:distance具有處理不提供隨機訪問(但使用專門化爲隨機訪問迭代器提供恆定時間距離)的迭代器的優點。

相關問題