C++ 栈(stack)使用简述

目录

1、有关函数的作用

2、测试用例


至于栈的结构与原理(先入后出)这里就不细说了,这里主要记录下 C++ 的头文件 <stack> 有关栈的操作是如何使用的。

1、有关函数的作用

stack<type> s;定义一个参数类型为 type 的栈
s.push()

压栈,无返回值

s.emplace()压栈,无返回值(与push的区别下面细说)
s.pop()

栈顶元素出栈,不返回元素,无返回值

s.top()

返回栈顶元素,该元素不出栈

s.empty()

判断栈是否为空,是返回 true

s.size()返回栈中元素数量

push() 与 emplace() 的区别:

首先 s.push() 与 s.emplace() 的最终执行效果是一模一样的,都是在栈顶加入一个元素,差别就是压栈元素的来源可能不同。

对于包含简单的基本类型(如int)的栈来说两者之间几乎没有差别,但当栈的类型是一些大型、复杂的类,具有复杂的构造函数或复制构造函数时,区别就出现了:

  • push() 接受一个已经存在的元素(比如已实例化的类或变量),并将它的副本附加到容器中。push总是只接受一个参数,即要复制到栈顶中的元素。
  • emplace() 可以现场通过参数列表创建该类的一个实例放到栈顶。要放置的参数将作为参数转发给栈中所含的类的构造函数。如果类有默认构造函数,emplace 可以有一个参数、多个参数,或者根本没有参数。

例如,当栈的参数是类时,push的参数必须是已实例化的类名作为参数,而 emplace 则可以直接使用类初始化参数现场初始化一个类实例加入栈顶。因此 emplace 的功能比 push 更强大,且兼容 push,但一般使用过程中,使用 push 就足够了。

( 这个问题在网上好像很少有人关注欸,如果我没说清楚那就去下面这个链接里自行理解哈)C++: Stack's push() vs emplace() - Stack Overflowicon-default.png?t=M276https://stackoverflow.com/questions/26198350/c-stacks-push-vs-emplace/26198609

2、测试用例

#include <stack>
#include <iostream>
#include <string>

using namespace std;

int main()
{
    stack<string> test_stack;
    test_stack.push("you~ ");  // 向栈中压入元素(pop)
    test_stack.push("meet ");  // 向栈中压入元素(pop)
    test_stack.push("to ");  // 向栈中压入元素(pop)
    test_stack.push("nice ");  // 向栈中压入元素(pop)
    cout << "size of test_stack: " << test_stack.size() << endl;  // 获取栈内元素数量
    while (!test_stack.empty())  // 栈是否为空,是:true
    {
        string temp = test_stack.top(); // 返回栈顶元素,该元素不出栈
        cout << temp ;
        test_stack.pop();  // 栈顶元素出栈,不返回元素
    }
    
    return 0;

}

// 运行结果 //
size of test_stack: 4
nice to meet you~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

地球被支点撬走啦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值