(我的STL相關的博客目錄:https://blog.csdn.net/Kprogram/article/details/90408011)
(stack-c++官網:http://www.cplusplus.com/reference/stack/)
stack 是數據結構 “棧”,擁有元素先進後出的特性,如果用數組來作爲棧,長度是有限的,而且需要儲存棧頂的指針,有點麻煩且侷限。stl提供了一個不定長容器stack來作爲棧,stack表留有有棧操作的各種成員函數,方便實用。
0 - 頭文件:stack 命名空間:std
#include <stack>
using namespace std;
1 - 構建一個stack:stack<typename> name
typename指的是棧內數據類型,可以是 int, double, 可以是struct, class, 也可以是 stack, string等等。總之是一個數據對象都行。
name 是你構建的棧的名字,符合變量命名法則就行。
例:構建一個 int 類型的棧, 名字叫做 S。
stack<int> s;
2 - 使用stack:常用成員函數 ( 假設你創建的stack對象名字叫 S )
(粉紅色的函數爲常用函數!大部分情況下這些函數就夠用了)
無參函數:
empty():如果stack爲空,返回True, 反之則返回 False。
top():返回棧頂元素。
pop():刪除棧頂元素,不返回棧頂元素(一般與top()配合使用:先返top(),再pop(),相當於出棧操作)。
size():返回stack內數據的個數(相當於數組長度)。
#一般用法:(假如是一個int類型的棧)
while(!S.empty()) {//當棧不爲空
int I = S.top(); S.pop();//元素出棧
...//對I的某些操作
有參函數:
push(type):把一個數據(type)壓入棧頂(相當於入棧)。
因爲對於棧,push等同於push_back,所以stack 沒有push_back成員函數!(已經試過了會報錯)
swap(S1):交換S 和 S1 中的內容(S1是另一個stack對象)。
//假設棧內的數據類型是data
class data {
int a;
int b;
public:
data(int x, int y):a(x), b(y) {}
};
//push
data d(1,2);
S.push(d);
//或者
S.push(data(1,2));
push的優化:emplace函數(點擊藍色字體>emplace<)