:: ADVANCE ::
[STL] 어댑터 본문
[STL] 어댑터
어댑터는 구성 요소의 인터페이스를 변경한다.
일반 컨테이너(반복자나 함수)를 기반으로 특수(특정한 기능을 가진) 컨테이너(반복자나 함수)를 제공하는 느낌?
* 컨테이너 어댑터 (container adaptor) : stack, queue, priority_queue
* 반복자 어댑터 (iterator adaptor) : reverse_iterator, back_insert_iterator, front_insert_iterator, insert_iterator
* 함수 어댑터 (function adaptor) : 바인더(binder), 부정자(negator), 함수 포인터 어댑터(adaptor for pointers to functions)
stack
대표적인 컨테이너 어댑터
일반 컨테이너를 LIFO(Last In First Out) 방식의 stack 컨테이너로 변환
empty, size, push_back, pop_back, back 인터페이스(멤버 함수)를 지원하는 컨테이너는 모두 stack 컨테이너 어댑터를 사용하여 LIFO 방식의 스택으로 변환할 수 있다. 시퀀스 컨테이너는 모두 멤버 함수를 가지므로 stack 컨테이너 어댑터의 컨테이너로 이용할 수 있다.
stack 컨테이너 어댑터의 디폴트 컨테이너는 deque 컨테이너이다.
reverse_iterator
대표적인 반복자 어댑터
일반 반복자의 동작 방식을 반대로 동작시키는 역방향 반복자(reverse iterator)로 변환
reverse_iterator<vector<int>::iterator> riter(v.end())
: vector<int>::iterator 타입 정방향 반복자(v.end())의 역방향 반복자(riter)를 생성
reverse_iterator<vector<int>::iterator> end_riter(v.begin())
: vector<int>::iterator 타입 정방향 반복자(v.begin())의 역방향 반복자(end_riter)를 생성
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | #include <iostream> #include <stack> #include <vector> using namespace std; int main() { // default -> deque 컨테이너 stack<int> s1; // vector 컨테이너 stack<int, vector<int>> s2; vector<int> v; vector<int>::iterator iter; for (iter = v.begin(); iter != v.end(); iter++); // 일반 반복자를 iterator를 역방향 반복자 reverse_iterator로 변환 reverse_iterator<vector<int>::iterator> riter(v.end()); reverse_iterator<vector<int>::iterator> end_riter(v.begin()); for (; riter != end_riter; riter++) { cout << *riter << " "; } cout << endl; return 0; } | cs |
not2
대표적인 함수 어댑터 부정자
조건자 함수 객체(이항)을 NOT(반대)로 변환
'Algorithm > Algorithm' 카테고리의 다른 글
[BitMask] 에라토스테네스의 체 (0) | 2016.07.17 |
---|---|
[STL] vector (0) | 2016.07.04 |
[STL] 알고리즘 (0) | 2016.07.02 |
[STL] 컨테이너, 반복자 (0) | 2016.06.30 |
[Binary Search] 이진 탐색 (0) | 2016.06.24 |