[C++ 표준] STL 반복자 소개

Date:     Updated:

카테고리:

태그:

인프런에 있는 홍정모 교수님의 홍정모의 따라 하며 배우는 C++ 강의를 듣고 정리한 필기입니다. 😀
🌜 [홍정모의 따라 하며 배우는 C++]강의 들으러 가기!


Cpp Reference

위키 백과 표준 템플릿 라이브러리

반복자

  • 컨테이너에 저장되있는 원소들을 공통적인 방법으로 하나씩 접근할 수 있게 해줌.
    • 모든 컨테이너들이 다 같은 방법으로 반복자 사용 가능.
  • 각 타입에 ::iterator 또는 ::const_iterator 를 뒤에 붙여주면 사용이 가능하다.
    • vector 컨테이너의 반복자 itr
      • vector<int>::iterator itr;
    • vector 컨테이너의 const한 반복자 citr
      • vector<int>::const_iterator citr;
  • 포인터와 비슷하게 사용한다.
    • 간접 참조 가능
      • itr = v.begin() + 2 에서 *itr 간접 참조를 하면 세번째 원소 값이 리턴된다.
  • iterator 와 const_iterator 의 차이
    • const_iterator 는 반복자가 가리키는 원소의 값을 변경하지 못한다.
      • 반복자 값이 변경되지 못하는게 아니고 반복자가 가리키는 원소의 값이 변경될 수 없는 것!
    • 일반 반복자는 포인터와 비슷하고 const 반복자는 const 포인터와 비슷하다. (간접참조로 값을 변경하지 못하는)
  • 초기화 하는 방법
    • itr = container.begin()
      • 컨테이너이름.begin() 하면 첫번째 원소의 iterator를 리턴


vector에서의 사용 예시

예시 1

  • itr = container.begin();
    • 첫번째 주소를 받아
  • while (itr != container.end())
    • 반복자가 끝까지 다 돌때까지.
  • *itr
    • 반복자가 가리키는 원소를 이용한 후 (간접참조같이)
  • ++itr 다음 반복자.
#include <iostream>
#include <vector>
#include <list>
#include <set>
#include <map>

using namespace std;

int main()
{
	vector<int> container;

	for (int i = 0; i < 10; ++i)
		container.push_back(i);

	vector<int>::const_iterator itr;
	itr = container.begin();
	
	while (itr != container.end())
	{
		cout << *itr << "  ";
		++itr;
	}	
}


예시 2

  • for문 사용
#include <iostream>
#include <vector>
#include <list>
#include <set>
#include <map>

using namespace std;

int main()
{
	vector<int> container;

	for (int i = 0; i < 10; ++i)
		container.push_back(i);

	vector<int>::const_iterator itr;
	
	for (auto itr = container.begin(); itr != container.end(); ++itr)
		cout << *itr << "  ";
	cout << endl;
}


예시 3

  • for-each 문 이용
  • for (auto& itr : container)
#include <iostream>
#include <vector>
#include <list>
#include <set>
#include <map>

using namespace std;

int main()
{
	vector<int> container;

	for (int i = 0; i < 10; ++i)
		container.push_back(i);

	vector<int>::const_iterator itr;
	
	for (auto& itr : container)
		cout << itr << "  ";
	cout << endl;
}


list에서의 사용 예시

  • list<int> container;
    • push_back 사용
  • 벡터와 동일한 반복자 문법.
#include <iostream>
#include <vector>
#include <list>
#include <set>
#include <map>

using namespace std;

int main()
{
	list<int> container;

	for (int i = 0; i < 10; ++i)
		container.push_back(i);

	vector<int>::const_iterator itr;
	
	for (auto& itr : container)
		cout << itr << "  ";
	cout << endl;
}


set에서의 사용 예시

  • set<int> container;
    • insert 사용
  • 벡터와 동일한 반복자 문법.
#include <iostream>
#include <vector>
#include <list>
#include <set>
#include <map>

using namespace std;

int main()
{
	set<int> container;

	for (int i = 0; i < 10; ++i)
		container.insert(i);

	vector<int>::const_iterator itr;
	
	for (auto& itr : container)
		cout << itr << "  ";
	cout << endl;
}


map에서의 사용 예시

  • map<int, char> container;
    • insert 사용
      • make_pair 이용하여 key와 value 를 함께 insert 해주기
  • itr → first : Key
  • itr → second : Value
#include <iostream>
#include <vector>
#include <list>
#include <set>
#include <map>

using namespace std;

int main()
{
	map<int, char> container;

	for (int i = 0; i < 10; ++i)
		container.insert(make_pair(i, char(i + 65)));

	vector<int>::const_iterator itr;
	
	for (auto& itr : container)
		cout << itr->first << "  " << itr->second << endl;
	cout << endl;
}
💎출력💎

0 A
1 B
2 C
3 D
4 E
5 F
6 G 
7 H
8 I
9 J


🌜 개인 공부 기록용 블로그입니다. 오류나 틀린 부분이 있을 경우 
언제든지 댓글 혹은 메일로 지적해주시면 감사하겠습니다! 😄

맨 위로 이동하기

댓글남기기