C++ STL中 Stack讲解

1 篇文章 0 订阅

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

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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值