官方参考地址: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;
上面显示的是控制台打印结果输出,构造器被调用了。