2012-04-10 12 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 = ... 
} 

수퍼 trival 인 경우 용서하십시오. 확실한 해결책은 인덱스를 반복하는 것입니다,하지만 내 생각은 그 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은 랜덤 액세스를 제공하지 않는 반복자에서 작업하는 이점이 있습니다 (그러나 임의 액세스 반복자에 대해 일정 시간 간격을 제공하기 위해 특수화를 사용합니다).

관련 문제