개발바닥

C++ 반복자(Iterator) 본문

개인 공부

C++ 반복자(Iterator)

라이언 2020. 3. 27. 14:58
반응형

C++ 표준 라이브러리를 보면 다양한 라이브러리들이 있다. 보통 세 개의 라이브러리들을  C++ 표준 라이브러리라고 일컫는다.

  • 임의 타입의 객체를 보관할 수 있는 컨테이너 (Container)
  • 컨테이너에 보관된 원소에 접근할 수 있는 반복자 (Iterator)
  • 반복자들을 가지고 일련의 작업을 수행하는 알고리즘 (Algorithm)

이번 장에는 반복자에 대해서 알아보겠습니다.

반복자 (Iterator) 란?

STL에서 반복자는 포인터와 비슷하게 동작한다.

반복자는 컨테이너에 저장된 원소를 순회하면서 접근하는 방법을 제공한다.

또한, 컨테이너와 알고리즘을 하나로 동작하게끔 중간에서 인터페이스 역할을 한다. 

 

STL의 모든 컨테이너는 각자의 반복자를 제공한다. 공통적으로는 멤버함수 begin() end()가 순차열의 시작과 끝을 가리킨다. 주의할 점은 순차열의 시작과 끝에서 끝은 실제 원소가 아니라, 끝을 표시하는 원소이다.

 

#include<iostream>
#include<vector>
#include<map>
#include<set>
#include<list>
#include<deque>
using namespace std;

int main() {
	vector<int>v;
	map<int,int> m;
	set<int> s;
	list<int> l;
	deque<int> dq;
	for (int i = 1; i < 10; i++) {
		v.push_back(i);
		m.insert(make_pair(i, i));
		s.insert(i);
		l.push_back(i);
		dq.push_back(i);
	}
	vector<int>::iterator iter_v;
	map<int, int>::iterator iter_m;
	set<int>::iterator iter_s;
	list<int>::iterator iter_l;
	deque<int>::iterator iter_dq;

	cout << "================ Vector =================\n";
	for (iter_v = v.begin(); iter_v != v.end(); iter_v++) {
		cout << *iter_v << ' ';
	}cout << '\n';
	
	cout << "================ Map =================\n";
	for (iter_m = m.begin(); iter_m != m.end(); iter_m++) {
		cout <<"key = "<< iter_m->first << " value = "<<iter_m->second<<'\n';
	}cout << '\n';

	cout << "================ Set =================\n";
	for (iter_s = s.begin(); iter_s != s.end(); iter_s++) {
		cout << *iter_s << ' ';
	}cout << '\n';

	cout << "================ List =================\n";
	for (iter_l = l.begin(); iter_l != l.end(); iter_l++) {
		cout << *iter_l << ' ';
	}cout << '\n';

	cout << "================ Deque =================\n";
	for (iter_dq = dq.begin(); iter_dq != dq.end(); iter_dq++) {
		cout << *iter_dq << ' ';
	}cout << '\n';
	
	//auto 키워드를 사용하면 초깃값의 형식에 맞춰 선언하는 인스턴스(변수)의 형식이 자동으로 결정된다.
	//타입 추론이라고 한다. 매개변수에 사용 금지 c++ 14 부터 함수 반환 타입으로 사용 가능
	cout << '\n';
	cout << "================== auto ==================\n";
	cout << '\n';
	cout << "================ Vector =================\n";
	for (auto it = v.begin(); it != v.end(); it++) {
		cout << *it << ' ';
	}cout << '\n';

	cout << "================ Map =================\n";
	for (auto it = m.begin(); it != m.end(); it++) {
		cout << "key = " << it->first << " value = " << it->second << '\n';
	}cout << '\n';

	cout << "================ Set =================\n";
	for (auto it = s.begin(); it != s.end(); it++) {
		cout << *it << ' ';
	}cout << '\n';

	cout << "================ List =================\n";
	for (auto it = l.begin(); it != l.end(); it++) {
		cout << *it << ' ';
	}cout << '\n';
	cout << "================ Deque =================\n";
	for (auto it = dq.begin(); it != dq.end(); it++) {
		cout << *it << ' ';
	}cout << '\n';

	
	return 0;
}

결과 화면

반응형

'개인 공부' 카테고리의 다른 글

C++ sort 비교 함수  (0) 2020.03.27
C++ 소수점 출력하기  (0) 2020.03.27
Comments