ㅇ 컨테이너 어댑터
- 컨테이너 어댑터는 기본 컨테이너의 기능 중 일부만을 공개하여 기능이 제한 되거나 변형된 컨테이너를 만든다.
- 기존 컨테이너의 구현 중 일부는 그대로 사용하되 외부에서 사용하는 인터페이스만 변경하는 것이다.
- STL은 스텍, 큐, 우선쉬위 큐 세가지의 컨테이너를 어댑터로 제공
ㅇ 스텍
- 선형적인 기억 공간에 자료를 저장하되, LIFO를 할 수 있다.
- 임의 위치를 엑세스한거나 중간에서 삽입, 삭제하는 동작은 필요치 않다.
- 스텍의 정의
template<class T, class Cont = deque<T> >
class stack { ... }
- 스텍에 들어갈 데이터 타입 T와 스텍이 자료 저장을 위해 사용할 컨테이너 Cont(스텍의 요소 타입과 같은 타입을 저장하는 컨테이너) 이다.
- Cont는 디폴트로 제공, 벡터나 리스트로 교체 가능
- 스텍이 제공하는 타입은 size_type, value_type, container_type 세가지 밖에 없다.
- container_type 은 스텍이 자료 관리를 위해 사용하는 기본 컨테이너의 타입이며 템플릿 인수 Cont와 같은 타입
- 생성자
explicit stack(const allocator_type& al = allocator_type());
- 스텍은 만들자 마자 비어 있어야 하므로 초기화하는 방법이 별다른게 없는 셈이다.
stack<T> s; 식으로 저장할 타입만 템플릿 인수로 지정하면 된다.
- 스텍의 고유 동작 3가지 : push, pop, top
void push(const T& x);
void pop();
value_type& top();
const value_type& top() const;
- top는 상수 버젼과 비상수 버전으로 나뉜다.
ㅇ push
- 스택의 상단에 값을 추가하는데 인수로 추가할 값을 전달하면 된다.
- 기억 장소가 무한해서 추가는 성공하므로 리턴값은 없다.
ㅇ pop
- 상단의 값을 제거
- 스텍의 값이 없는 상태에서는 pop을 해서는 안되는데 pop은 리턴값이 없으모로 이런 에러를 처리할 수 없다.
- 대신 대부분의 컴파일러에서 빈 스텍에 대해 pop을 호출하여 assert가 호출되도록 되어 있다.
ㅇ top
- 스텍 상단의 값을 읽어 래퍼런스로 리턴한다.
- 상수 버전과 비상수 버전이 따로 준비되어 있다.
※STL의 스텍은 읽는 함수와 제거하는 함수가 분리되어 있다. 스텍이라는 자료 구조의 원론을 지키지 않고 있는 셈인데 임의 타입에 대해 동작해야 하기 때문이다.
1 #include <iostream>
2 #include <stack>
3
4 using namespace std;
5
6 void main()
7 {
8
9 stack<int> s;
10
11 s.push(4);
12 s.push(7);
13 s.push(2);
14
15 while (!s.empty()) {
16 cout << s.top() << endl;
17 s.pop();
18 }
19 }
- 템플릿의 두버째 인수를 지정하면 s를 다음과 같이 선언할 수도 있다. 물론 사용하는 컨테이너의 헤더 파일은 적절히 인클루드 해야 한다.
1 stack<int, vector<int> > s;
2 stack<int, list<int> > s;
3
4 #include <Turboc.h>
5 #include <math.h>
6 #include <stack>
7 using namespace std;
8
9 ....
10
11 void MakePostfix(char *Post, const char *Mid)
12 {
13 stack<char> cS;
14 ....
15 while (!cS.empty() && GetPriority(cS.top()) >= GetPriority(*m)) {
16 *p++=cS.top();
17 cS.pop();
18 }
19 ....
20
21
ps : 출처 및 자세한 내용은 www.WinAPI.co.kr 참고
'[ C/ C++ 프로그래밍 ] > [ STL ]' 카테고리의 다른 글
[ 혼연 정리 ] STL 알고리즘 - 1 [ 읽기 알고리즘 ] (2) | 2010.06.24 |
---|---|
[ 혼연 정리 ] 연관 컨테이너 - 9 [ 컨테이너 어댑터 ] (0) | 2010.06.24 |
[ 혼연 정리 ] 연관 컨테이너 - 7 [ 맵 ] (0) | 2010.06.24 |
[ 혼연 정리 ] 연관 컨테이너 - 6 [ 맵 ] (0) | 2010.06.24 |
[ 혼연 정리 ] 연관 컨테이너 - 2 [ 셋 ] (0) | 2010.06.24 |