欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

C++ STL中 Stack讲解

程序员文章站 2024-01-19 19:15:28
...

官方参考地址:https://en.cppreference.com/w/cpp/container/stack

学过数据结构的人都知道,Stack是一种先进后出的数据结构,有点儿类似于你把多块饼干堆叠起来,只有先拿走上面的,才能拿下面的一样,简称LIFO

C++ STL中 Stack讲解

上面是关于Stack的定义,Stack实际上只是对底层容器的一些封装而已,这个容器必须实现SequenceContainer(参考地址为https://en.cppreference.com/w/cpp/named_req/SequenceContainer),标准库中vector,list和deque都实现了SequenceContainer。

常用方法如下:

C++ STL中 Stack讲解

top方法返回栈顶部的元素。

empty检测栈是否为空。

size返回栈中的元素个数。

push方法向栈中推入元素。

pop弹出栈顶元素,也就是删除顶层元素。

这里有一个方法值得讲解一下,那就是emplace方法。

C++ STL中 Stack讲解

 这个方法用于向栈顶推入一个元素,但是推入的元素不是直接放入栈中的,而是这个被推入的元素被传递给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;

C++ STL中 Stack讲解

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