stack与queue的介绍和使用

目录

Stack

杂谈

构造函数

empty

size

top

push

emplace

pop

swap

queue


Stack

杂谈

如上图第一个红框处,stack也是一个类模板。第一个模板参数表示stack存储元素的类型是什么,第二个模板参数和stack的底层实现有关,因为stack是容器适配器, 关于设配器,笔者会在模拟实现中具体说明,第二个模板参数表示容器适配器stack底层是利用什么容器实现的,可以看到缺省值是deque<T>,所以stack默认的底层容器就是deque。

那什么样的容器才有资格成为stack的底层容器呢?如第二个红框处所示,底层容器可以是任何标准容器类模板或一些其他专门设计的容器类,容器必须支持以下操作:empty、size、back、push_back、pop_back。标准容器类vector、deque和list就满足了这些要求。默认情况下,如果没有为stack类模板在实例化时指定底层容器类,则默认使用标准容器deque。

栈的逻辑图如下所示。

如下图所示,可以看到对于stack,我们是没有为它实现迭代器类的,原因很简单,你可以想想,如果实现了一个迭代器类,那stack还能保证它后进先出的性质吗?答案是不能,如果有了迭代器,我们是能随心所欲的访问元素的。

构造函数

因为有缺省值,所以构造stack默认可以不传参数。那构造函数的参数ctnr表示什么呢?前面也说过stack是一个容器适配器,所以该参数表示你想用什么底层容器为基础去构造stack,可以是vector、可以是list,如果不指定则默认是deque。

empty

该函数用于判断stack是否为空,即判断存储的有效数据的个数是否为0,若为空则返回true,否则返回flase。

size

该函数用于返回stack中存储的有效数据的个数,注意返回值的类型是size_t而不是int。

top

该函数用于返回栈顶元素的引用,如上图所示,value_type这个类型就是stack<T>中的T的类型。

push

函数用于往栈顶插入一个value_type类型也就是T类型的元素。

emplace

emplace的功能和push一致,都是插入元素,那区别在哪呢。

用法上的区别如下所示。

效率上的区别如下所示。 

pop

该函数用于删除栈顶的元素。 

swap

该函数用于交换两个stack中管理的数据。 

queue

对于queue的性质,除了queue是先进先出这一点性质和stack不一样,其余所有性质二者都是完全相同的,比如queue也是一个容器适配器,默认适配的容器也是deque。对于queue的操作函数,除了queue没有stack的top函数,以及stack没有queue的back和front函数,其余接口的使用方法是和stack完全一致的。

一个容器类需要支持哪些成员函数才能让queue这个容器适配器适配呢?

对于这一点,queue和stack也不相同,区别如下图所示。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值