블로그 이미지
Every unexpected event is a path to learning for you. blueasa

카테고리

분류 전체보기 (2797)
Unity3D (853)
Programming (479)
Server (33)
Unreal (4)
Gamebryo (56)
Tip & Tech (185)
협업 (61)
3DS Max (3)
Game (12)
Utility (68)
Etc (98)
Link (32)
Portfolio (19)
Subject (90)
iOS,OSX (55)
Android (14)
Linux (5)
잉여 프로젝트 (2)
게임이야기 (3)
Memories (20)
Interest (38)
Thinking (38)
한글 (30)
PaperCraft (5)
Animation (408)
Wallpaper (2)
재테크 (18)
Exercise (3)
나만의 맛집 (3)
냥이 (10)
육아 (16)
Total
Today
Yesterday

#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

반응형
Posted by blueasa
, |