2012-04-10 8 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

あなたはこれを行うことができます:あなたはstd::distance、または減算を使用することができます

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

std:distanceは、ランダムアクセスを提供しないイテレータ(ただし、ランダムアクセスイテレータの一定時間内に距離を提供するために特殊化を使用する)で作業する利点があります。

関連する問題