C++ 반복자 (iterator)

포인터와 상당히 비슷하며, 컨테이너에 저장되어 있는 원소들을 참조할 때 사용

반복자란, 컨테이너에 저장되어 있는 모든 원소들을 전체적으로 훑어 나갈 때 사용하는, 일종의 포인터와 비슷한 객체라고 할 수 있음

  • 반복자는 컨테이너 내부의 원소(객체)를 가리키고 접근.(* 연산자)
  • 반복자는 다음 원소로 이동하고 컨테이너의 모든 원소를 순회할 수 있어야 한다. (++, !=, == 연산자 제공)

반복자의 범주

양방향 반복자 : ++, -- 이동이 가능한 반복자 : (list, set, multiset, map, mutilmap)

임의 접근 반복자 : 양방향 반복자 기능에 +, -, +=, -=, [] 연산이 가능한 반복자 : (vector)

 

* end() 함수는 끝이 아니다.

end()가 가리키고 있는 것은 맨 마지막 원소의 바로 다음번 원소이다. 따라서 이러한 반복자를 past-the-end 반복자라고 부른다.(종점을 지나쳐버린 곳을 가리키는 반복자)

 

벡터 iterator 선언 예시

	vector<int> v; //벡터 선언
	vector<int>::iterator it; //iterator 선언
	v.push_back(1); 
	v.push_back(2);
    
	it = v.begin(); //it 초기 값
	cout << *it << endl; 
	it++; //+한 칸이동
	it = v.end(); //마지막 칸의 다음 칸
	it--; //-한 칸이동 (마지막 칸)
	cout << *it << endl;
	

모든원소 출력 예시

 for (iter = v.begin(); iter != v.end(); ++iter)
 {
        cout << *iter << endl;
 }

 

 

 

auto

초기화 값에 따라 알아서 데이터 타입을 정해주는 키워드

auto a1 =10; //int 타입
auto a2 =10.f //float 타입
auto a3 = "c"; //char 타입
auto a4 ="BlockDMask" // string 타입
auto a5 = {10,20,30}; //int 배열 타입

 

auto에 const, const& 한정자가 붙을 때

auto는 한정자와 함께 사용하면 효율적이다.

auto와 &, * 함께 사용하기

&, *의 특성은 복사가 되지않고 주소를 가리키거나 참조를 하는 것 

 

 

vector auto 이용하기

for(auto it = v.begin(); it!= v.end(); ++it)
{
	*it *= 2; //vector원소에 x2 하기
}

 

vector auto& 이용하기

for(auto& elem : v)
{
	elem *=2; //vector 원소에 x2 하기
}

 

+ Recent posts