2013-12-14 5 views
4

for 루프를 사용하여 컨테이너의 value_type 대신 실제 반복자에 액세스 할 수 있습니까? 내가하고 싶은 것에for 루프 범위의 반복자에 액세스 (C++ 11)

샘플 코드는 (x는 쌍이기 때문에, 컴파일되지 않습니다) :

#include <iostream> 
#include <map> 

using namespace std; 

std::map<int, float> v; 

int main() 
{ 
    for(auto x : v)  
     cout<<x->first<<", "<<x->second<<endl; 
    return 0; 
} 
+2

짧은 대답 : 아니오 (컨테이너의 항목이 반복자이고 사용자가 액세스하려는 경우가 아니면). –

+0

부수적으로, const가 아닌 값 ('auto') 대신 const 참조 ('const auto &')를 사용하여'x'를 취할 수도 있습니다. – syam

+0

감사합니다 얘들 아 - 난 그냥 예제를 간단하게 유지하고 싶었, 내 사건은 그보다 조금 더 복잡합니다 – Babis

답변

3

아니, 범위 기반 루프는 반복자에서 멀리 추상화합니다. 당신이 반복자를 처리 할 필요가 없도록 범위 기반 for 루프가 존재

for(auto x : v)  
    cout<<x.first<<", "<<x.second<<endl; 

: 그럼에도 불구하고, 귀하의 경우, 당신은 단지 ->.에 변경해야합니다. 당신이 반복자를해야하는 경우, 수동 루프를 작성해야하지만, 실제 코드는 더 이상되지 않습니다 :

for (auto it = begin(v), ite = end(v); it != ite; ++it) 
    //loop body 
0

예, 반복자를 래핑 적합한 용기 어댑터 등이 operator*() 반환 반복자 대신의 값.

그런 포장지로 부스트가 올 것이라고 생각합니다.

그렇지 않을 수도 있습니다. 하지만 SO 여기에 하나를 발견했다 : https://stackoverflow.com/a/14920606/103167

그리고 사실을 Xeo 관찰로, 그것은, 부스트와 함께 할 수 counting_range가 연산을 수행하기 때문에, 정수로 그냥 잘 반복자에서 작동 :

for (auto it : boost::counting_range(v.begin(), v.end()))