표준 라이브러리는 관련 개체 컬렉션을 저장할, 형식이 안전한 다양한 컨테이너를 제공합니다. 컨테이너는 클래스 템플릿입니다. 컨테이너 변수를 선언할 때 컨테이너에 포함할 요소의 형식을 지정합니다.
1. vector
항목의 나열을 저장하고 항목별로 랜덤 액세스가 가능하다.
배열과 다르게 인덱스 경계 검사를 자동으로 수행한다.
배열과 동일하게 연속된 메모리에 저장된다.
마지막 인덱스에 항목을 삽입/삭제 할 때 O(1)의 소요시간을 보장한다.
임의의 위치에 있는 데이터에 접근할 때 사용하기 좋다.
2. list
이중 연결 리스트 데이터 구조이다.
vector나 array처럼 일련의 항목을 저장한다.
다만 데이터들이 연속된 메모리에 위치하지 않는다. (앞뒤로 연결된 데이터들의 위치만 기억)
항목을 찾는데는 느리지만 임의의 위치에 데이터를 삽입/삭제할 때 용이하다.
3. dequeue
양방향 큐(double ended queue)는 항목 탐색과 양단에서의 데이터 삽입/삭제에 빠른 성능을 제공한다.
다만 중간의 위치에 삽입/삭제시 느린 성능을 가진다.
4. array (C++11)
C 스타일 배열에 대한 얇은 Wraaper다.
스스로 크기 정보를 가지며, 반복자(iterator)를 제공한다.
5. forward_list (C++11)
단방향 연결 리스트는 list보다 메모리를 적게 차지한다.
그 외 특징은 list와 동일하다.
6. queue
큐는 선입선출로 동작한다.
한쪽 끝에서 새로운 데이터를 삽입하고, 반대쪽 끝에서 데이터를 꺼낸다.
데이터의 삽입/삭제는 빠른 성능을 제공한다.
7. priority_queue
기본적으론 queue와 같지만 각 항목이 우선순위를 가진다.
항목이 꺼내어 질 때 우선순위가 고려되고, 동일한 우선순위라면 선입선출에 따라 결정된다.
데이터의 삽입/삭제가 발생할 때 우선순위에 따라 정렬되므로 속도가 느리다.
8. stack
스택은 선입후출의 구조를 제공한다.
9. set과 multiset
데이터 자체로 키가 되며, 한 집합 안에 2개 이상 중복해서 존재할 수 없다.
정렬은 Key 비교 기능을 사용해서 수행된다.
삽입/삭제는 vector보다 빠르지만 list보다 느리고, 항목 찾기는 vector보다 느리고 list보다 빠르다.
만약 중복해서 저장해야 한다면 multiset를 사용한다.
10. map과 multimap
키와 쌍을 저장하여 키 값에 의해 항목의 저장순서를 유지한다.
그 외부분은 set과 동일하다.
11. bitset
각 bit(&, |, ^, ~, <<, >>) 조작을 추상화 하여 제공하는 컨테이너
다른 컨테이너와 다르게 반복자가 지원되지 않고, 크기가 고정되어 있다.
12. 해시 테이블 (C++11)
비순차 연관 컨테이너라고도 한다.
순서를 키로 하지 않고 해쉬 테이블을 사용하기 때문에, 일반적인 map, set보다 빠른 속도를 제공한다.
unordered_map
unordered_set
unordered_multimap
unordered_multiset
https://msdn.microsoft.com/ko-kr/library/1fe2x6kt.aspx
'프로그래밍 > C,C++' 카테고리의 다른 글
람다(lambda) (0) | 2018.04.11 |
---|---|
STL 알고리즘 (0) | 2018.04.02 |
예외처리(exception) (0) | 2018.04.01 |
포인터 인자 검증하기 (0) | 2016.07.20 |
[C]Split함수 구현 (0) | 2016.04.20 |