:: ADVANCE ::

[STL] 어댑터 본문

Algorithm/Algorithm

[STL] 어댑터

KSJ14 2016. 7. 2. 01:24
반응형

[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<intvector<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
Comments