이번엔 STL에서 클래스의 내부에 만들어져 있는 이터레이터(iterator)라는 개념을 알아봅시다.
이터레이터는 일종의 포인터인데, STL 안의 데이터를 가리킵니다.
먼저 리스트(list)라는 개념을 알아봅시다.
리스트는 배열을 포함하는 더 넓은 개념으로, 값들이 순서를 가지고 저장되어 있는 것입니다.
반대되는 것은 집합입니다. 값들이 저장되어는 있으나 순서는 없죠.
배열을 예로 들면 int a[5] = {1, 4, 7, 10, 13} 에서는 각 값에 0, 1, 2, 3, 4번이란 순서가 있죠.
벡터 안에 리스트의 형태로 값이 저장되어 있다고 하면
이터레이터는 포인터의 형태로 이 리스트에 접근합니다.
그리고 이때 쓰이는 함수 중 2개가 begin() 함수와 end() 함수입니다.
begin() 함수는 벡터의 데이터가 있는 리스트의 시작 주소를 리턴하는데, 첫 번째 값 위치입니다.
end() 함수는 리스트의 끝 주소를 리턴하는데, 마지막 값보다 한 칸 뒤 위치의 값을 리턴합니다.
그러니 여기서 말하는 리스트의 끝 주소에 도달했다면, 이미 모든 값을 다 지나왔고
벡터의 끝에 도달해 있는 것이죠. 이땐 루프 같은 것을 중단해야 합니다.
이터레이터를 선언하는 방법은
vector<자료형>::iterator 이터레이터명;
이런 식으로 하는데, 앞에 "vector<...>::"를 붙여서 어느 자료형을 가진 벡터인지 명시합니다.
물론, 저 안의 자료형이 맞는 벡터에만 쓸 수가 있습니다.
iterator라는 건 각 클래스마다 안에 중첩 클래스의 형태로 선언된 또다른 클래스라고 볼 수 있는데,
중첩 클래스는 대략, 클래스 선언부 안에서 선언된 클래스입니다.
여기서는 vector라는 클래스 템플릿 안에 iterator라는 클래스가 또 선언된 겁니다.
'C++' 카테고리의 다른 글
String 메서드 (0) | 2024.05.24 |
---|---|
개행 문자 입력 방식 (0) | 2024.05.24 |
Fill 함수 (0) | 2024.03.26 |
Pair 클래스 (0) | 2024.03.12 |
Vector 함수(push_back, emplace_back) (0) | 2024.03.11 |