CPP/c++실전사용법

이터레이터(C++)(알고리즘)

뜨거운 개발자 2022. 12. 29. 09:05

위 글은 큰돌의 터전 님의 강의자료를 참조해서 정리하고 제가 알고리즘을 풀면서 더 추가적으로 사용할 만한 내용들을 정리한 글입니다.

알고리즘 풀이 강의로 큰돌의 터전님의 강의 강력 추천드립니다.

강의링크

이터레이터란

이터레이터는 컨테이너에 저장되어 있는 요소의 주소를 가리키는 개체를 말하며 포인터를 일반화한 것을 말합니다. vector, map 등 각각 다르게 구현된 컨테이너들을 일반화된 이터레이터를 통해 쉽게 순회할 수 있습니다.

바로는 주소값을 반환하지는 못하며 &*를 통해 한단계 더 거쳐서 가리키는 해당 요소의 주소값을 반환할 수 있습니다.

#include <bits/stdc++.h> using namespace std; vector<int> v; int main(){ for(int i = 1; i <= 5; i++)v.push_back(i); 	for(int i = 0; i < 5; i++){ 		cout << i << "번째 요소 : " << *(v.begin() + i) << "\n"; 		cout << &*(v.begin() + i) << '\n'; 	} 	for(auto it = v.begin(); it != v.end(); it++){ 		cout << *it << ' '; 	} 	cout << '\n'; 	for(vector<int>::iterator it = v.begin(); it != v.end(); it++){ 		cout << *it << ' '; 	} 	auto it = v.begin(); 	advance(it, 3); 	cout << '\n'; 	cout << *it << '\n'; 	// cout << v.begin() << '\n'; //에러 } /* 0번째 요소 : 1 0x135e067f0 1번째 요소 : 2 0x135e067f4 2번째 요소 : 3 0x135e067f8 3번째 요소 : 4 0x135e067fc 4번째 요소 : 5 0x135e06800 1 2 3 4 5 1 2 3 4 5 4 */

앞의 코드를 보면 vector<int>:: iterater를 auto로도 선언할 수 있는 것을 알 수 있는데 vector<int>:: iterater가 너무 길기 때문에 간단하게 이터레이터를 선언하기 위해 auto로 선언한 것입니다.

이터레이터의 함수 중 많이 쓰는 함수로는 begin()과 end(), advance() 3개가 있습니다

begin()

컨테이너의 시작 위치를 반환합니다.

end()

컨테이너의 끝 다음의 위치를 반환하는 데 사용됩니다.

보통 it != v.end()이런 식의 코드를 많이 보셨을 텐데요.

컨테이너를 다 순회하고 컨테이너의 끝에 도착했다는 것을 가리킵니다.

advance(iterator, cnt)

해당 iterator를 cnt까지 증가시킵니다.

 


Uploaded by

N2T
728x90