[C++ 표준] STL 반복자 소개
카테고리: STL
태그: Cpp STL Coding Test
인프런에 있는 홍정모 교수님의 홍정모의 따라 하며 배우는 C++ 강의를 듣고 정리한 필기입니다. 😀
🌜 [홍정모의 따라 하며 배우는 C++]강의 들으러 가기!
반복자
- 컨테이너에 저장되있는 원소들을 공통적인 방법으로 하나씩 접근할 수 있게 해줌.
- 모든 컨테이너들이 다 같은 방법으로 반복자 사용 가능.
- 각 타입에
::iterator
또는::const_iterator
를 뒤에 붙여주면 사용이 가능하다.- vector 컨테이너의 반복자 itr
- vector<int>::iterator itr;
- vector 컨테이너의 const한 반복자 citr
- vector<int>::const_iterator citr;
- vector 컨테이너의 반복자 itr
- 포인터와 비슷하게 사용한다.
- 간접 참조 가능
itr = v.begin() + 2
에서*itr
간접 참조를 하면 세번째 원소 값이 리턴된다.
- 간접 참조 가능
- iterator 와 const_iterator 의 차이
- const_iterator 는 반복자가 가리키는 원소의 값을 변경하지 못한다.
- 반복자 값이 변경되지 못하는게 아니고 반복자가 가리키는 원소의 값이 변경될 수 없는 것!
- 일반 반복자는 포인터와 비슷하고 const 반복자는 const 포인터와 비슷하다. (간접참조로 값을 변경하지 못하는)
- const_iterator 는 반복자가 가리키는 원소의 값을 변경하지 못한다.
- 초기화 하는 방법
- itr = container.begin()
- 컨테이너이름.begin() 하면 첫번째 원소의 iterator를 리턴
- itr = container.begin()
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
🌜 개인 공부 기록용 블로그입니다. 오류나 틀린 부분이 있을 경우
언제든지 댓글 혹은 메일로 지적해주시면 감사하겠습니다! 😄
댓글남기기