2

ランダム アクセス イテレータのインデックスを取得する方法はあるのだろうか。例えば:

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

4

3 に答える 3

10
myIndex = iter - myStringVec.begin();

また

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

また、移植可能にするために (そしておそらくコンパイラの警告をなくすために)、は .ではなくmyIndex型にする必要があることに注意してください。std::vector<std::string>::difference_typeint

于 2012-04-10T22:19:05.093 に答える
5

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

于 2012-04-10T22:20:49.130 に答える
4

あなたはこれを行うことができます:

if(someFunction(*iter))  //got a hit on this string
{
   myIndex = std::distance(myStringVec.begin(), iter);
}
于 2012-04-10T22:20:29.700 に答える