首页 > 编程语言 >【C++】STL 容器 - stack 堆栈容器 ① ( stack 堆栈容器特点 | stack 堆栈容器与 deque 双端数组容器对比 | 简单示例 )

【C++】STL 容器 - stack 堆栈容器 ① ( stack 堆栈容器特点 | stack 堆栈容器与 deque 双端数组容器对比 | 简单示例 )

时间:2024-01-02 12:04:44浏览次数:46  
标签:容器 deque 元素 栈顶 堆栈 stack



文章目录

  • 一、 stack 堆栈容器简介
  • 1、stack 堆栈容器引入
  • 2、stack 堆栈容器特点
  • 3、stack 堆栈容器与 deque 双端数组容器对比
  • 二、 代码示例 - stack 堆栈容器简单示例
  • 1、代码示例
  • 2、执行结果








一、 stack 堆栈容器简介



1、stack 堆栈容器引入



C++ 语言中的 STL 标准模板库 中的 stack 堆栈容器 , 是一个 后进先出 ( LIFO , Last In First Out ) 的容器 , stack 容器提供了在栈顶进行插入和删除操作 ;

使用 stack 容器前 , 需要导入 <stack> 头文件 ;

#include "stack"

stack 堆栈容器 是在 deque 双端数组 的基础上 , 屏蔽了部分功能 实现的 ; deque 功能比 stack 功能要强大一些 ;



2、stack 堆栈容器特点



stack 堆栈容器特点 :

  • 后进先出 : LIFO , Last In First Out , 最后一个被插入的元素将是第一个被删除的元素 ;
  • 执行效率高 : 时间复杂度是 O(1) ;
  • 成员函数少 : 相比于 vector 动态数组 和 deque 双端数组 , stack 只提供很少的几个成员函数 ;
  • 异常安全 : stack 堆栈容器 可以保证 在出现异常时 , 数据完整 ;


3、stack 堆栈容器与 deque 双端数组容器对比



stack 堆栈容器与 deque 双端数组容器对比 :

  • 容器特点 :
  • stack 堆栈容器 是一种后进先出 LIFO 的数据结构 , 该容器只允许在一端进行插入和删除操作 ;
  • push() 方法 , 用于在堆栈顶部添加元素 ,
  • pop()方法用于从堆栈顶部删除元素 ,
  • 栈顶相当于 deque 或 vector 容器的尾部 ;
  • deque 双端数组容器 , 又称为 双端队列 , 是一种更为灵活的数据结构 , 该容器支持在队列的头部和尾部进行插入和删除操作 ;
  • 迭代器迭代 :
  • stack 堆栈容器 不提供迭代器 , 也不支持 在首部 插入 / 删除 元素 ;
  • Deque提供了迭代器,并支持队列的头部和尾部添加或删除元素 , 使用起来相对更为方便 ;
  • 主要用途 : stack 堆栈容器 的主要用途是保存按照后进先出顺序排列的元素 ; 例如保存程序的调用历史 ;
  • 子类实现 : deque 双端数组容器 有多种实现 , 如 : ArrayDeque / LinkedList ;





二、 代码示例 - stack 堆栈容器简单示例



1、代码示例



在下面的代码中 :

首先 , 创建了 stack 堆栈容器对象 , 容器中存储 int 类型对象 ;

// 创建 stack 堆栈容器对象
    std::stack<int> s;

然后 , 向 stack 容器加入元素 , 又称为 入栈操作 , 将元素加入到栈顶 ;

// 入栈操作  
    s.push(1);
    s.push(2);
    s.push(3);

再后 , 调用 std::stack#top() 函数 , 可以打印栈顶元素 ;

// 打印栈顶元素
std::cout << "栈顶元素 : " << s.top() << std::endl;

最后 , 调用 std::stack#pop() 函数 , 将栈顶元素弹出 ;

// 出栈
s.pop();

如果想要判定 stack 容器中的元素是否都弹出栈 , 可调用 std::stack#empty() 函数 进行判定 ;

while (!s.empty()) {
        // 打印栈顶元素
        std::cout << "栈顶元素 : " << s.top() << std::endl;
        // 出栈
        s.pop();
    }



代码示例 :

#include "iostream"
using namespace std;
#include "stack"

int main() {

    // 创建 stack 堆栈容器对象
    std::stack<int> s;

    // 入栈操作  
    s.push(1);
    s.push(2);
    s.push(3);

    // 出栈操作  
    while (!s.empty()) {
        // 打印栈顶元素
        std::cout << "栈顶元素 : " << s.top() << std::endl;
        // 出栈
        s.pop();
    }

	// 控制台暂停 , 按任意键继续向后执行
	system("pause");

	return 0;
};



2、执行结果



执行结果 :

栈顶元素 : 3
栈顶元素 : 2
栈顶元素 : 1
请按任意键继续. . .

【C++】STL 容器 - stack 堆栈容器 ① ( stack 堆栈容器特点 | stack 堆栈容器与 deque 双端数组容器对比 | 简单示例 )_开发语言


标签:容器,deque,元素,栈顶,堆栈,stack
From: https://blog.51cto.com/u_14202100/9066920

相关文章

  • 使用容器快速在阿里云 ECS 多节点上搭建 Citus 12.1 集群
    阿里云ECS机器节点这里我们使用两台同一区域的ECS机器。机器配置:2核2G。(ps:阿里云99元一年的活动)一台安装coordinator(协调器),这里内网IP为172.18.60.11一台安装worker,这里内网IP为172.18.60.12操作系统两台机器分别安装了厂商的AlibabaCloudLinux3系统......
  • C++STL常用容器queue和stack
    2.5stack容器2.5.1stack基本概念概念:stack是一种先进后出(FirstInLastOut,FILO)的数据结构,它只有一个出口栈中只有顶端的元素才可以被外界使用,因此栈不允许有遍历行为栈中进入数据称为---入栈push栈中弹出数据称为---出栈pop生活中的栈:子弹进弹夹出弹夹的过程2.5.2s......
  • list容器
    #include<iostream>#include<list>//引入头文件#include<algorithm>usingnamespacestd;intmain(){ list<int>a; intb[]={1,2,3,4}; list<int>c(b,b+sizeof(b)/sizeof(int)); a.insert(a.begin(),c.begin(),c.end()); a.insert(a.beg......
  • list容器介绍代码
    #include<iostream>#include<list>#include<algorithm>usingnamespacestd;intmain(){ list<int>a; intb[]={1,2,3,4}; list<int>c(b,b+sizeof(b)/sizeof(int)); a.insert(a.begin(),3,1); //队头添加元素 a.push_front(0); //队尾添加元素......
  • list容器
    #include<iostream>#include<list>//引入list容器的头文件#include<algorithm>usingnamespacestd;intmain(){ list<int>a; intb[]={1,2,3,4}; list<int>c(b,b+sizeof(b)/sizeof(int)); a.insert(a.begin(),c.begin(),c.end()); a.in......
  • 容器题
     1.#include<bits/stdc++.h>usingnamespacestd;intmain(){intn;cin>>n;inta[n]={},x,y;for(inti=0;i<n;i++){cin>>a[i];}cin>>x;deque<int>b(a,a+sizeof(a)/sizeof(int));......
  • 容器
    //#include<iostream>//#include<deque>//usingnamespacestd;//intmain(){// intn;// cin>>n;// intb[n];// for(inti=0;i<n;i++){// cin>>b[i];// }// deque<int>a(b,b+sizeof(b)/sizeof(int));// intx;// cin>&g......
  • deque容器例题
    #include<iostream>#include<deque>//引入deque容器的头文件usingnamespacestd;intmain(){ deque<int>a; intb[]={1,2,3,4}; deque<int>c(b,b+sizeof(b)/sizeof(int)); a.insert(a.begin(),c.begin(),c.end()); //队头添加元素 a.push_front(0);......
  • C++STL常用容器deque以及常用接口
    2.1deque容器2.1.1deque容器基本概念功能:双端队列容器,可以对头端进行插入删除操作deque与vector区别:vector对于头部的插入删除效率低,数据量越大,效率越低deque相对而言,对头部的插入删除速度回比vector快vector访问元素时的速度会比deque快,这和两者内部实现有关deque内部工作原理:......
  • spring(自动加载xml装载容器)
    1.实现将DefaultListableBeanFactory类注入到当前AbstractBeanDefinitionReader中2.取出xml内容,并生成beanfinition实例对象,注入到DefaultListableBeanFactory类中的map中。packageorg.springframework.beans.factory.xml;importcn.hutool.core.util.StrUtil;importorg.do......