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;
}