STLシリーズの二スタック


スタック(statck)というデータ構造はコンピュータでかなり有名です.スタック内のデータは先進的な後出(First In Last Out,FILO)である.スタックには出口が1つしかありません.新規要素(スタックの上部にのみ追加可能)、要素の削除(スタックの上部要素のみ削除可能)、スタックの上部要素の取得などの操作が可能です.STLでは,スタックは別の容器を底部構造とし,さらにインタフェースを変化させてスタックの特性に適合させるとよい.そのため、非常に便利です.次に、スタックの関数リストとVS 2008のスタックのソースコードを示します.STLではスタックが5つの一般的な操作関数(top()、push()、pop()、size()、empty()で、よく覚えています.
 
VS 2008のスタックのソースコード
友情のヒント:初めて読むときは、細部に時間を無駄にしないように、実現思想に注意してください.
//VS2008  stack    MoreWindows  (http://blog.csdn.net/MoreWindows)
template >
class stack
{	// LIFO queue implemented with a container
public:
	typedef _Container container_type;
	typedef typename _Container::value_type value_type;
	typedef typename _Container::size_type size_type;
	typedef typename _Container::reference reference;
	typedef typename _Container::const_reference const_reference;

	stack() : c()
	{	// construct with empty container
	}

	explicit stack(const _Container& _Cont) : c(_Cont)
	{	// construct by copying specified container
	}

	bool empty() const
	{	// test if stack is empty
		return (c.empty());
	}

	size_type size() const
	{	// test length of stack
		return (c.size());
	}

	reference top()
	{	// return last element of mutable stack
		return (c.back());
	}

	const_reference top() const
	{	// return last element of nonmutable stack
		return (c.back());
	}

	void push(const value_type& _Val)
	{	// insert element at end
		c.push_back(_Val);
	}

	void pop()
	{	// erase last element
		c.pop_back();
	}

	const _Container& _Get_container() const
	{	// get reference to container
		return (c);
	}

protected:
	_Container c;	// the underlying container
};

スタックは他のデータ構造をさらにカプセル化し、独自のインタフェースを提供するだけであるため、コードは非常に簡潔であり、コンテナを指定しない場合、デフォルトではdequeを下位データ構造として使用します(dequeについてよく知られていませんか?『STLシリーズの1つであるdeque双方向キュー』を参照).スタックの使用例を次に示します.
//  stack   empty() size() top() push() pop()
// by MoreWindows(http://blog.csdn.net/MoreWindows)
#include 
#include 
#include 
#include 
using namespace std;
int main()
{
	//    list vector      ,     deque 。
	stack>      a;
	stack>   b;
	int i;
	
	//    
	for (i = 0; i < 10; i++)
	{
		a.push(i);
		b.push(i);
	}

	//    
	printf("%d %d
", a.size(), b.size()); // while (!a.empty()) { printf("%d ", a.top()); a.pop(); } putchar('
'); while (!b.empty()) { printf("%d ", b.top()); b.pop(); } putchar('
'); return 0; }

 
転載は出典、原文住所を明記してください.http://blog.csdn.net/morewindows/article/details/6950881