컨테이너 어댑터
순차열 컨테이너를 다른 기능을 제공하는 순차열 컨테이너로 정의하기 위해 래핑되는 클래스 템플릿.
기존 인터페이스를 확장(Adapt)한다.
stack<T>
는deque<T>
컨테이너를 Push-Down 스택으로 저장하는 방식으로 변환하는 어댑터 클래스 템플릿.queue<T>
는deque<T>
컨테이너를 큐로 저장하는 방식으로 변환하는 아댑터 클래스 템플릿priority_queue<T>
컨테이너는vector<T>
컨테이너를 가장 큰 원소가 항상 앞에 오도록 원소들의 순서를 관리하는 큐로 변환하는 아댑터 클래스 템플릿(Heap
)
Stack 컨테이너
연산
top()
스택 상위에 있는 원소 T&을 반환한다.push(const T& obj)
스택 상위에 obj의 복사본을 넣는다.push_back()
기반push(T&& obj)
스택 상위에 obj을 이동한다.pop()
스택상위에 원소를 삭제한다.size()
스택에 있는 원소의 갯수를 반환한다.empty()
스택에 원소가 하나도 없으면 trueemplace()
T생성자 호출후, 컨테이너 내부에 객체 생성하고stack<T>
상위에 객체를 추가swap(stack<T> &ohter_stack)
현재 스택의 원소와 전달된 원소들을 교환. 같은 타입이어야만 한다.
stack<T>
에서operator=()
의 복제버전과 이동버전이 모두 정의되어 있음.stack 객체끼리 비교할수 있는 연산자도 정의되어 있음. 비교방식은 대응하는 원소들을 사전순서에 맞춰 비교한다.
1 |
|
Queue 컨테이너
연산
front()
큐에 있는 첫번째 윈소에 대한 참조 반환,const
라면const&
반환back()
큐에 있는 마지막 원소에 대해 참조를 반환,const
라면const&
반환push(const T& obj)
obj의 복제본을 큐의 끝에 추가한다.push(T&& obj)
큐의 끝에 obj을 이동해서 추가한다.pop()
큐에서 첫번째 원소를 삭제size()
큐에 있는 원소의 개수 반환empty()
큐에 원소가 하나도 없으면 trueemplace()
T 생성자 호출해 컨테이너 내부에 객체를 생성하고 큐의 끝에 추가swap(queue<T> &other_q)
현재 큐에 있는 원소들과 인수로 전달된 원소들을 교환한다. 큐와 같은 타입으로 되어 있어야됨.
operator=()
복제 버전과 이동 버전이 정의되어 있음.stack의 비교 연산자와 같은 방식으로 동작
stack과 마찬가지로 queue에도 반복자가 없다.
Priotiry Queue 컨테이너
우선순위 큐 컨테이너는 윈소들을 정렬된 순서로 담아두는 큐를 정의한다.
priotiry_queue<T>
는 3가지 매개변수가 있고, 그 중에 두가지는 기본인수다.우선순위 큐는 Heap이라는 자료구조로 이루어져 있고 Heap은 트리구조로, 최소힙, 최대힙이 있다.
1 | template <typename T, typename Container=std::vector<T>, typename Compare=std::less<T>> |
우선순위 큐 생성
1 | priority_queue<string> words; // 생성 |
연산
push(const T& obj)
컨테이너 obj의 복제본을 순차열의 적절한 위치에 넣는다push(T&& obj)
컨테이너 안으로 obj를 이동해서 순차열의 적절한 위치에 넣는다.emplace(T constructor args)
:emplace()
에 전달된 인수로 생성자 호출해 T 객체 바로생성하고 순차열의 적절한 위치에 넣는다. 보통은 정렬 작업이 필요top()
우선순위 큐의 첫번째 객체의 참조를 반환pop()
첫 번째 원소를 제거size()
큐에 있는 객체의 갯수 반환empty()
큐에 하나도 없으면 trueswap(priority_queue<T>& other)
현재 큐에 있는 원소들과 인수로 전돨된 원소들을 교환
우선순위 큐는 할당 연산자가 구현되어 있고, 각 복제 버전과 이동버전이 정의되어 있음.
우선순위 큐는 비교 연산자가 정의되어 있지 않다. 새원소를 추가하면 우선순위 큐의 유지에 필요한 정렬을 수행하느라 느려진다.