官方參考地址:https://en.cppreference.com/w/cpp/container/stack
學過數據結構的人都知道,Stack是一種先進後出的數據結構,有點兒類似於你把多塊餅乾堆疊起來,只有先拿走上面的,才能拿下面的一樣,簡稱LIFO。
上面是關於Stack的定義,Stack實際上只是對底層容器的一些封裝而已,這個容器必須實現SequenceContainer(參考地址爲https://en.cppreference.com/w/cpp/named_req/SequenceContainer),標準庫中vector,list和deque都實現了SequenceContainer。
常用方法如下:
top方法返回棧頂部的元素。
empty檢測棧是否爲空。
size返回棧中的元素個數。
push方法向棧中推入元素。
pop彈出棧頂元素,也就是刪除頂層元素。
這裏有一個方法值得講解一下,那就是emplace方法。
這個方法用於向棧頂推入一個元素,但是推入的元素不是直接放入棧中的,而是這個被推入的元素被傳遞給T類型構造函數的參數,構造一個新的T類型的對象,再推入棧,下面有一個例子。
首先創建一個簡單的類,用於測試目的。
#ifndef C___UNIT_H
#define C___UNIT_H
#include <iostream>
using namespace std;
template<typename T> class Unit {
private:
T t;
public:
Unit(T t) : t(t) {
cout << __BASE_FILE__ << " constructor called" << endl;
}
~Unit() {
cout << __BASE_FILE__ << " destructor called" << endl;
}
};
調用代碼如下:
stack<Unit<int>> su;
su.emplace(1);
cout << su.size() << endl;
上面顯示的是控制檯打印結果輸出,構造器被調用了。