🙇‍♀️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;
}