STL 소개, 컨테이너, 반복자
STL은 Standard Template Library의 약자이다.
구성 요소
1. 컨테이너 (Container)
: 객체를 저장하는 객체로 컬렉션 혹은 자료구조라고도 한다.
2. 반복자 (Iterator)
: 포인터와 비슷한 개념으로 컨테이너의 원소를 가리키고, 가리키는 원소에 접근하여 다음 원소를 가리키게 하는 기능을 한다.
3.. 알고리즘 (Algorithm)
: 정렬, 삭제, 검색, 연산 등을 해걸하는 일반화된 방법을 제공하는 함수 템플릿이다.
4.. 함수 객체 (Function Object)
: 함수처럼 동작하는 객체로 operator() 연산자를 오버로딩한 객체이다.
5.. 어댑터 (Adaptor)
: 구성 요소의 인터페이스를 변경해 새로운 인터페이스를 갖는 구성요소로 변경한다.
6.. 할당기 (Allocator)
: 컨테이너의 메모리 할당 정책을 캡슐화한 클래스 객체로 모든 컨테이너는 자신만의 기본 할당기를 가지고 있다.
STL의 특성
1. 효울성
2. 재사용성
3. 확장성
컨테이너 (Container)
: 같은 타입을 저장, 관리할 목적으로 만들어진 클래스이다.
1. 표준 시퀀스 컨테이너 (standard sequence container)
: 컨테이너 원소가 자신만의 삽입 위치(순서)를 가지는 컨테이너, 삽입되는 순서에 따라 원소의 위치가 결정되고 바뀌지 않는다.
ex) vector, deque, list : 선형적
2. 표준 연관 컨테이너 (standard associative container)
: 저장 원소에 삽입 순서와 다르게 특정 정렬 기준에 의해 자동 정렬되는 컨테이너, 삽입 순서와 상관없이 정렬 기준에 따라 원소의 위치가 결정된다.
ex) set, multiset, map, multimap : 비선형적
데이터를 하나의 연속한 메모리 단위로 저장하는지
1. 배열 기반 컨테이너 (array-based container)
: 데이터 여러 개가 하나의 메모리 단위에 저장된다.
ex) vector, deque
2. 노드 기반 컨테이너 (node-based container)
: 데이터 하나를 하나의 메모리 단위에 저장한다.
ex) list, set, multiset, map, multimap
반복자
: 컨테이너에 저장된 원소를 순회하고 접근하는 일반화된 방법을 제공한다. 컨테이너와 알고리즘이 하나로 동작하게 묶어주는 인터페이스 역할을 한다.
반복자의 특징
1. 컨테이너 내부의 원소(객체)를 가리키고 접근할 수 있어야 한다.
2. 다음 원소로 이동하고 컨테이너의 모든 원소를 순회할 수 있어야 한다.
STL에서 컨테이너 원소의 집합을 순차열 (sequence)라고 한다.
반복자는 순차열의 한 원소를 가리킨다.
반복자는 5가지 범주로 나뉜다.
1. 입력 반복자 (input iterator)
: 현 위치의 원소를 한번만 읽을 수 있는 반복자
ex) istream
2. 출력 반복자(output iterator)
: 현 위치의 원소를 한번만 쓸 수 있는 반복자
ex) ostream
3. 순방향 반복자 (forward iterator)
: 입력, 출력 반복자 기능에 순방향으로 이동(++)이 가능한 재할당될 수 있는 반복자
4. 양방향 반복자 (bidirectional iterator)
: 순방향 반복자 기능에 역방향으로 이동(--)이 가능한 반복자
ex) list, set, multiset, map, multimap
5. 임의 접근 반복자 (random access iterator)
: 양방향 반복자 기능에 +, -, +=, -=, []연산이 가능한 반복자
ex) vector, deque