C++ STL中 Stack講解

官方參考地址: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;

上面顯示的是控制檯打印結果輸出,構造器被調用了。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章