C++ 适配器 stack

13 篇文章 0 订阅
8 篇文章 0 订阅

不了解适配器的读者可以先去看一看这一篇博客:C++ 适配器-CSDN博客

栈数据结构介绍

我们平时洗碗的时候,叠成一层层的碗最后只能从上面往下面开始拿;平时箱子里面叠的衣服,也是只能从上面慢慢拿。先放进去的东西后拿出来,这种内存特点的数据结构就叫栈。

就像一个只有单边口的容器,数据只能从上面进,也只能从上面出。

针对于这种内存特点,我们可以用数组(或顺序表)来实现,从数组末尾进行插入和删除;同时我们也可以用链表,把链表的头作为栈的出口进行进出(链表的头插和头删)操作。甚至双向链表情况下两头都可以;同时我们也可以用双端队列,双端队列的头插头删和尾插尾删操作都很便利。

因为stack可以用很多其他的数据结构来实现,所以stack就被定义为了迭代器而不是容器,因为本质还是其他容器的套用。

stack的相关函数

stack的函数很少,因为它的结构限制很多,只允许一方进一方出,导致什么迭代器等都没有。

构造函数

第一个就是只传容器类型,第二个。和第一个差不多,就是缺省参数的右值引用。后面的就是加了一个内存池。

具体看这个例子就行了,我们用的最多的就是默认构造。

empty

判断是否为空,是为真反之为假

size

返回栈的大小

top

返回栈顶的元素

push

入栈一个元素

emplace

和push功能一样,但是在某些场景下比push的效率高,目前作者还不知其原理。

pop

出栈一个元素

swap

保证容器一样的情况下交换两个栈的内部数据。

适配器stack的实现

stack函数少,底层又是用的已经实现好的容器,所以很方便实现:

  • 5
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
你好!关于容器 stack,我可以给你一些简单的介绍。 在C++中,stack是一种容器适配器(container adapter),它提供了一种后进先出(LIFO)的数据结构stack基于另一个容器(默认情况下是deque)来实现其操作。它的主要操作包括推入元素到栈顶、从栈顶弹出元素以及访问栈顶元素,这些操作都是在常数时间内完成的。 要使用stack容器,首先需要包含头文件<stack>。然后,你可以声明一个stack对象,并使用其成员函数来操作栈。以下是一些常用的stack操作: 1. push(element): 将元素压入栈顶。 2. pop(): 从栈顶弹出一个元素,但不返回它。 3. top(): 返回栈顶元素,但不将其从栈中移除。 4. empty(): 检查栈是否为空。 5. size(): 返回栈中元素的数量。 下面是一个简单的示例代码,演示了如何使用stack容器: ```cpp #include <iostream> #include <stack> int main() { std::stack<int> myStack; myStack.push(3); myStack.push(5); myStack.push(8); std::cout << "Size of stack: " << myStack.size() << std::endl; std::cout << "Top element: " << myStack.top() << std::endl; myStack.pop(); std::cout << "Size of stack after pop: " << myStack.size() << std::endl; return 0; } ``` 在这个示例中,我们首先创建了一个存储整数的stack对象myStack。然后,我们使用push函数将一些元素压入栈顶,并使用top函数访问栈顶元素。最后,我们使用pop函数弹出一个元素,并检查栈的大小。 希望这个简要介绍能对你有所帮助!如果你有任何其他问题,请随时提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值