본문 바로가기

프로그래밍/C++

STL 소개, 컨테이너, 반복자

STLStandard 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

 

'프로그래밍 > C++' 카테고리의 다른 글

vector 1부  (0) 2019.06.20
vector의 간략한 소개  (0) 2019.06.20
함수 포인터  (0) 2019.06.12
template  (0) 2019.06.09
const와 static  (0) 2019.06.04