set은 배열처럼 s[3] 이런 식으로 인덱스로 접근할 수 없다.
set을 순회하고 싶다면 다음과 같이 해야 한다.
for (set<int>::iterator iter = s.begin(); iter != s.end(); iter++) {
cout << *iter << " ";
}
iterator는 포인터이다. 포인터는 주소를 담고 있기 때문에 그 주소에 있는 값을 출력해보려면 * 연산자로 접근해야 한다. *iter
이렇게 말이다.
s.begin()
은 set의 시작 주소이다.
for문 헤더에서 iterator를 s.begin()
으로 초기화한다.
그러면 iter는 set의 시작 주소를 가리키게(저장하게) 된다.
그리고 for문으로 진입한다.
for문에 진입해서는 역참조연산자 *를 이용해서 set의 원소의 값을 출력한다.
그리고 iter++
을 통해 그 주소를 4바이트만큼(int 타입이므로) 증가한다. 이 과정을 set의 마지막 주소에 가기 전까지 반복하면 된다.
아니면
for(auto x : s){
cout << x << " ";
}