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;

上面显示的是控制台打印结果输出,构造器被调用了。

 

版权声明:本文为oKanJianLiao原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/oKanJianLiao/article/details/91350252