STL list를 이용한 LIFO/FIFO 구현
#include <iostream>
#include <list>
using namespace std;
template<typename T>
class Stack
{
public:
Stack() : m_bLIFO(true) { Clear(); }
// 저장 방식을 설정한다.
void SetLIFO( bool bLIFO ) { m_bLIFO = bLIFO; }
// 초기화 한다.
void Clear()
{
if( false == m_Datas.empty() )
m_Datas.clear();
}
// 스택에 저장된 개수
int Count() { return static_cast( m_Datas.size() ); }
// 저장된 데이터가 없는가?
bool IsEmpty() { return m_Datas.empty(); }
// 데이터를 저장한다.
void push( T data )
{
m_Datas.push_back( data );
}
// 스택에서 빼낸다.
bool pop( T* data )
{
if( IsEmpty() )
{
return false;
}
if( m_bLIFO )
{
memcpy( data, &m_Datas.back(), sizeof(T) );
m_Datas.pop_back();
}
else
{
memcpy( data, &m_Datas.front(), sizeof(T) );
m_Datas.pop_front();
}
return true;
}
private:
list<T> m_Datas;
bool m_bLIFO; // true 이면 후입선출, false 이면 선입선출
};
void main()
{
Stack<int> Int_Stack;
Int_Stack.SetLIFO(true);
Int_Stack.push(10);
Int_Stack.push(20);
Int_Stack.push(30);
int Value = 0;
Int_Stack.pop(&Value);
//마지막에 넣은게 처음 나온다.
cout << "Last In First Out pop : " << Value << endl << endl;
//데이터 초기화
Int_Stack.Clear();
//FIFP로 설정
Int_Stack.SetLIFO(false);
Int_Stack.push(10);
Int_Stack.push(20);
Int_Stack.push(30);
Int_Stack.pop(&Value);
//처음에 넣은게 처음 나온다.
cout << "First In First Out pop : " << Value << endl << endl;
}
출처 : http://cafe.naver.com/jgcafe/694
'Programming > STL' 카테고리의 다른 글
[펌] stl list 순회도중 삭제하기 (0) | 2011.06.08 |
---|---|
유틸 클래스 pair (0) | 2011.04.08 |
2.1 문자열을 키로 쓰는 map, set 성능 향상시키기 (0) | 2011.02.07 |
[펌] Effective STL 읽은 후 정리~ (0) | 2011.01.05 |
항목 27 : const_iterator를 iterator로 바꾸는 데에는 distance와 advance를 사용하자. (0) | 2010.11.03 |