STL-stack

9 篇文章 0 订阅

目录

1.包含头文件

2.stack的创建与初始化

3.stack的基本操作


1.包含头文件<stack>

#include<stack>

2.stack的创建与初始化

  • stack<T[, Container=deque<T>]> st:创建一个存储类型 T 的空栈,默认以 deque<T> 组织,也可以指定其他容器
  • stack<T, container<T>> st (con):创建一个 stack,用一个 Container<T>的实例初始化这个 stack

注:除了使用拷贝函数外,无法使用初始化列表来初始化 stack,即都使用 ( ),拷贝函数可以用 { }

第一条中所选容器必须支持 back()、push_back()、pop_back()、empty()、size() 才可以

第二条中用于初始化的容器实例必须与所选容器类型一致;使用拷贝函数时,类型和底层容器都必须一致

#include<iostream>
#include<stack>
#include<queue>
#include<list>
#include<string>
#include<stdio.h>

using namespace std;

int main()
{
    deque<string> values {"123", "345", "567"};
    stack<string> stack1 (values);  // 用与底层组织类型一样的容器来初始化
    cout << stack1.top() << endl;  // 567
    cout << stack1.size() << endl;  // 3

    stack<string> stack2 (stack1);  // 用一个相同类型的 stack 来创建
    // 同 stack<string> stack2 {stack1};
    cout << stack2.top() << endl;  // 567
    cout << stack2.size() << endl;  // 3

    list<string> lvalues {"abc", "cde", "efg"};
    stack<string, list<string>> stack3 (lvalues);
    cout << stack3.top() << endl;  // efg
    cout << stack3.size() << endl;  // 3

    // stack<string> stack4 (lvalues);  
    // 报错, 底层容器不一样, stack4 是 deque<string>; lvalues 是 list<string>

    return 0;
}

3.stack的基本操作

  • top():返回一个栈顶元素的引用,类型为 T&;栈空,则返回值未定义,可能会报错(或不正常结束)
  • push():将元素入栈
  • pop():元素出栈,无返回值
  • size():返回栈中元素数目
  • empty():返回栈是否为空,类型为 bool
  • emplace():在栈顶生成元素,相当于 push()
  • swap():将栈与参数中的栈的元素互换;两个栈的 T 要一致

                 stack的基本操作,图片转载自:C++ stack(STL stack)用法详解

stack<T>容器适配器中的数据以LIFO的方式组织

#include<iostream>
#include<stack>
#include<queue>
#include<list>
#include<string>
#include<stdio.h>

using namespace std;

void showStack(const stack<int> & st)
{
    cout << "size: " << st.size() << endl;  // 输出栈的大小
    cout << "top: " << st.top() << endl;  // 输出栈顶元素
    cout << "empty: " << (st.empty() ? "true" : "false") << endl;  // 是否是空栈
}

int main()
{
    stack<int> stack1;
    // showStack(stack1);
    /*size: 0
     *top: (运行到这里会报错)
     *empty: true
     */

    stack1.push(7);  // 把 7 入栈
    showStack(stack1);
    /*size: 1
     *top: 7
     *empty: false
     */

    stack1.emplace(3);  // 把 3 入栈
    showStack(stack1);
    /*size: 2
     *top: 3
     *empty: false
     */

    stack<int> stack2 (stack1);  // 拷贝 stack1
    stack2.pop();  // 出栈
    showStack(stack2);
    /*size: 1
     *top: 7
     *empty: false
     */

    stack1.swap(stack2);  // 交换 stack1 和 stack2 的元素
    showStack(stack1);
    /*size: 1
     *top: 7
     *empty: false
     */

    showStack(stack2);
    /*size: 2
     *top: 3
     *empty: false
     */
    return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值