CS/C++

뇌를 자극하는 C++ STL : 11장. 컨테이너 어댑터

샤아이인 2022. 1. 18.

내돈내고 내가 공부한것을 올리며, 중요한 단원은 저 자신도 곱씹어 볼겸 가겹게 포스팅 하겠습니다.

1) 11장. 컨테이너 어댑터

컨테이너 어댑터는 다른 컨테이너의 인터페이스를 변경한 컨테이너 이다. STL에는 stack, queue, priority_queue 3가지 컨테이너 어댑터가 있다.

 

stack

stack 어댑터를 적용시킬 컨테이너는 empty(), push_back(), pop_back(), back(), size() 인터페이스를 지원해야한다.

따라서 이러한 인터페이스를 제공하는 vector, deque, list는 어댑터를 적용시켜 stack으로 사용할 수 있다.

 

다음 코드를 통하여 확인해 보자,

#include <iostream>
#include <vector>
#include <stack>
using namespace std;

int main()
{
	stack<int, vector<int>> st;

	st.push(1);
	st.push(2);
	st.push(3);

	while (!st.empty())
	{
		cout << st.top() << endl;
		st.pop();
	}

	return 0;
}
 

결과로는 다음과 같다.

 

참고로 나는 vector를 사용하여 stack을 만들었는데, 지정해주지 않을경우 deque가 기본값으로 사용된다.

 

queue

queue또한 위의 stack처럼 어댑터를 적용시킬 컨테이너가 empty(), push_back(), pop_front(), back(), size() 인터페이스를 지원해야한다. 따라서 vector는 사용할수가 없다.

 

queue의 주요 인터페이스는 원소를 추가하는 push(), 원소를 제거하는 pop(), 첫 원소를 참조하는 front()가 있다.

 

priority_queue

우선순위 큐는 내부적으로 STL의 heap알고리즘을 통하여 구현돼 있다. 또한 컨테이너 템플릿 인자로 받을 컨테이너는 임의접근반복자 를 제공하는 vector와 deque를 사용할 수 있다. 또한, empty(), push_back(), pop_back(), front(), size() 인터페이스를 지원해야한다.

 

다음 코드를 통해 확인해 보자.

#include <iostream>
#include <queue>
#include <deque>
using namespace std;

int main()
{
	priority_queue<int, deque<int>, greater<int>> priq;
	priq.push(10);
	priq.push(30);
	priq.push(20);
	priq.push(40);

	cout << "priority_queue : " << endl;
	while (!priq.empty())
	{
		cout << priq.top() << endl;
		priq.pop();
	}

	return 0;
}
 

결과는 다음과 같다.


 

2) 나의 현황

후다닥 이책 끝내보자!!

이글의 모든 사진과 내용의 출처는 공동환 님께 있습니다.

댓글