std :: set을 반복하는 방법?


91

이 코드가 있습니다.

std::set<unsigned long>::iterator it;
for (it = SERVER_IPS.begin(); it != SERVER_IPS.end(); ++it) {
    u_long f = it; // error here
}

->first가치 가 없습니다 . 가치를 어떻게 얻을 수 있습니까?

답변:


142

세트의 멤버를 검색하려면 반복기를 역 참조해야합니다.

std::set<unsigned long>::iterator it;
for (it = SERVER_IPS.begin(); it != SERVER_IPS.end(); ++it) {
    u_long f = *it; // Note the "*" here
}

C ++ 11 기능이있는 경우 범위 기반 for 루프를 사용할 수 있습니다 .

for(auto f : SERVER_IPS) {
  // use f here
}    

@ Mr.C64이 경우와 같이 정수 유형에 대해서는 그다지 중요하지 않습니다.
일부 프로그래머 친구

1
컨테이너를 수정하려는 경우 첫 번째를 사용해야한다는 점에 주목할 가치가 있습니다. Google 직원을 위해.
Legion Daeth 2016

3
C ++ 11 솔루션은 참조 (auto & f)와 함께 있어야합니다. 대부분의 경우에 더 좋습니다. 이 특정 경우에도 마찬가지입니다.
jaskmar

안녕하세요 Rob, 새 u_long 변수를 선언하는 것 외에 SERVER_IPS의 요소를 참조하려면 어떻게해야합니까? u_long & f = * it; ? 그렇지 않은 경우 어떻게해야합니까?
BioCoder

1
@BioCoder-참조 변수를 사용할 수 있지만 다음 과 같이 const 참조 변수 여야합니다 const u_long& f = *it;.
Robᵩ

15

*이전을 사용하십시오 it.

set<unsigned long>::iterator it;
for (it = myset.begin(); it != myset.end(); ++it) {
    cout << *it;
}

이것은 그것을 역 참조하고 반복기가 현재있는 요소에 접근 할 수 있도록합니다.


7
사소한 참고 : 일반적으로 반복기의 추가 복사본 하나를 피하기 위해 for 루프에서 ++ 대신 ++ it을 사용하는 것이 좋습니다.
user2891462

14

C ++ 11 표준의 또 다른 예 :

set<int> data;
data.insert(4);
data.insert(5);

for (const int &number : data)
  cout << number;

5

std :: set을 어떻게 반복합니까?

int main(int argc,char *argv[]) 
{
    std::set<int> mset;
    mset.insert(1); 
    mset.insert(2);
    mset.insert(3);

    for ( auto it = mset.begin(); it != mset.end(); it++ )
        std::cout << *it;
}

2
심지어for(auto i : mset) std::cout << i;
잭 Deeth
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.