C++ Rookiss Part3 자료구조와 알고리즘 : Stack
🙇♀️Stack
#include <stack>
으로 사용 가능
기본적으로 push
, pop
지원
동적 배열이나 연결 리스트로 구현 가능하다.
iterator의 통일성으로 인해 typename Container
로 vector, list 선택도 가능
🪐Stack
#include <iostream>
#include <stack>
#include <vector>
#include <list>
using namespace std;
// Stack (LIFO Fast-In-First-Out 후입 선출
template<typename T, typename Container = vector<T>>
class Stack
{
public:
void push(const T& value)
{
_container.push_back(value);
}
void pop()
{
_container.pop_back();
}
T& top()
{
return _container.back();
}
bool empty() { return _container.empty(); }
int size() { return _container.size(); }
private:
//vector<T> _container; // vector로 구현 가능
//list<T> _container; // list로 구현 가능
Container _container; // vector, list 선택 가능 (iterator의 장점!)
};
int main()
{
Stack<int, list<int>> s;
// 삽입
s.push(1);
s.push(2);
s.push(3);
// 비었나?
while (s.empty() == false)
{
// 최상위 원소
int data = s.top();
// 최상위 원소 삭제
s.pop();
cout << data << endl;
}
int size = s.size();
return 0;
}