본문 바로가기

C++

표준 템플릿 라이브러리

이번엔 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