1. 程式人生 > >C++中的堆疊stack的簡單用法

C++中的堆疊stack的簡單用法

1)push 能夠插入元素

2)pop 移除棧頂元素

使用的時候,需要包含標頭檔案 #include <stack>,stack 被宣告如下:

namespace std
{
    template <class T, class Container = deque<T> >
    class stack;
}

第一個模板引數表示元素的型別,第二個模板引數表明了實現堆疊所使用的容器,即內部用於儲存元素的容器,預設使用 deque,你可以使用任何的順序容器,甚至於自己提供的順序容器,只要含有 back(), push_back(), pop_back() 方法即可

定義一個棧:

std::stack<int> st;

std::stack<int, std::vector<int> > st2; // 使用 vector 做容器儲存元素

這裡提及一下 deque,對於 deque,元素被移除的時候,釋放記憶體,而且在重新分配記憶體(realloc)的時候,不會拷貝元素,這是與 vector 不同的地方

1. 核心介面

棧少不了的三個核心介面:

1)void push() 插入元素到棧頂

2)void pop() 移除棧頂元素(注意,函式型別為 void)

3)value_type& top() 返回棧頂元素,並不會移除這個元素(注意,返回的是棧頂元素的引用),看下面的程式碼:

    std::stack<int> st;
    st.push(1);
    st.top() = 2;   // 可以方便的修改棧頂元素
    std::cout << st.top() << "\n";   // 輸出 2

注意在 STL 中,在棧為空時,top 和 pop 是未定義的,對於檢查棧的大小,可以使用 empty 函式或者 size 函式

empty --- 如果棧為空,返回 true,否則返回 false

size --- 棧的大小

對於棧來說,幾乎(不是全部)就是上面介紹的幾個函數了

2. 型別

1)std::stack::value_type 元素的型別,等同於實現棧的順序容器的型別,例如預設情況下,std::stack::value_type 等同於 std::deque::value_type

2)std::stack::size_type 無符號的整數型別,用於定義 stack 的大小

3)std::stack::container_type 容器型別

3. 函式補充

建構函式:

explicit stack::stack(const Container& cont);

比較操作符:

包括 ==, <=, >=, !=, <, >

兩個棧相等的含義是,棧中元素數目,以及對應位置的元素相等

c++Stack(堆疊)是一個容器類的改編,為程式設計師提供了堆疊的全部功能,

————也就是說實現了一個先進後出的資料結構(FILO);

需包含<stack>標頭檔案;

主要有一下幾個函式:

empty
語法:   bool empty();

如當前堆疊為空,empty() 函式 返回 true 否則返回false.

pop
語法:   void pop();

pop() 函式移除堆疊中最頂層元素。

size
語法:   size_type size();

size() 函式返當前堆疊中的元素數目。

top
語法:    TYPE &top();

top() 函式返回對棧頂元素的引用.

可以通過它訪問stack中的每個元素:

i = s.size();
while(i--)
    printf("%lf\n",*(&s.top()-i));


一個簡單的例子:

#include <iostream>
#include <Stack>
using namespace std;

void main()
{
    stack<double> s;//可以是各種資料型別;
    for( int i=0; i < 10; i++ )
      s.push(i);
while(!s.empty())
{
printf("%lf\n",s.top());
s.pop();
}
    cout << "This stack has a size of " << s.size() << endl;
}