stack堆栈容器

堆栈是一个线性表,插入和删除只在表的一端进行。这一端称为栈顶(Stack Top),另一端则为栈底(Stack Bottom)。堆栈的元素插入称为入栈,元素的删除称为出栈。由于元素的入栈和出栈总在栈顶进行,因此,堆栈是一个后进先出(Last In First Out)表,即 LIFO 表。
    C++ STL 的堆栈泛化是直接通过现有的序列容器来实现的,默认使用双端队列deque的数据结构,当然,可以采用其他线性结构(vector 或 list等),只要提供堆栈的入栈、出栈、栈顶元素访问和判断是否为空的操作即可。由于堆栈的底层使用的是其他容器,因此,堆栈可看做是一种适配器,将一种容器转换为另一种容器(堆栈容器)。
    为了严格遵循堆栈的数据后进先出原则,stack 不提供元素的任何迭代器操作,因此,stack 容器也就不会向外部提供可用的前向或反向迭代器类型。
    stack堆栈容器的C++标准头文件为 stack ,必须用宏语句 "#include <stack>" 包含进来,才可对 stack 堆栈的程序进行编译。

创建 stack 对象
使用堆栈前,先要利用构造函数进行初始化,创建一个堆栈对象,以进行元素的入栈、出栈等操作。
1.    stack()
    默认构造函数,创建一个空的 stack 对象。
    例如,下面一行代码使用默认的 deque 为底层容器,创建一个空的堆栈对象 s 。
    stack<int>  s;
    
2.    stack(const stack&)
    复制构造函数,用一个 stack 堆栈创建一个新的堆栈。
    例如,下面的代码利用 s1 ,创建一个以双向链表为底层容器的空堆栈对象 s2 。
    // stack<int, list<int> >   s1;
    stack<int, list<int> >   s2(s1);

元素入栈
    stack堆栈容器的元素入栈函数为 push 函数。由于 C++ STL 的堆栈函数是不预设大小的,因此,入栈函数就不考虑堆栈空间是否为满,均将元素压入堆栈,从而函数没有标明入栈成功与否的返回值。
    如下是他的使用原型:
    void  push(const value_type& x)
    
    
元素出栈
    stack容器的元素出栈函数为 pop 函数,由于函数并没有判断堆栈是否为空,才进行元素的弹出,因此,需要自行判断堆栈是否为空,才可执行 pop 函数。
    void pop()
    
    下面的示例代码,将堆栈的所有元素全部出栈
    // stack<int>  s;
    while(!s.empty())
    { 
        s.pop();// 出栈
    }
    
    
取栈顶元素
    stack容器的栈顶元素的读取函数为 pop 函数,将取出最后入栈的元素,如下是它的使用原型
    value_type&  top()

堆栈非空判断
    随着堆栈元素不断出栈,堆栈可能会出现空的情况,因此,一般需要调用 empty 函数判断是否非空,才作元素出栈和取栈顶元素的操作。
    bool  empty()
    判断堆栈是否为空,返回 true 表示堆栈已空,false 表示堆栈非空。

c++ stl栈stack介绍


C++ Stack(堆栈) 是一个容器类的改编,为程序员提供了堆栈的全部功能,——也就是说实现了一个先进后出(FILO)的数据结构。

c++ stl栈stack的头文件为:

#include <stack>

c++ stl栈stack的成员函数介绍

操作 比较和分配堆栈

empty() 堆栈为空则返回真

pop() 移除栈顶元素

push() 在栈顶增加元素

size() 返回栈中元素数目

top() 返回栈顶元素

//----------------------------------------- 读取堆栈的栈顶元素
#include <stack>
#include <iostream>
using namespace std;
int main()
{// 创建堆栈对象stack<int> s;// 元素入栈s.push(3);s.push(19);s.push(23);s.push(36);s.push(50);s.push(4);// 元素依次出栈while(!s.empty()){// 打印栈顶元素,打印出:4 50 36 23 19 3cout << s.top() << endl;// 出栈s.pop();}return 0;
}
/*    堆栈的大小堆栈的元素个数可用 size 函数获得。每次元素入栈前,先检查当前堆栈的大小,超过某个界限值,则不允许元素入栈,以此可实现一个具有一定容量限制的堆栈。size_type  size()返回当前堆栈的元素个数下面的示例程序,将堆栈的大小设置为 100 个 int 元素,而且使用 list 双向链表做堆栈的底层容器,每次压入元素时均判断堆栈的大小是否超过100个元素的界限,从而实现具有容量限制的堆栈。
*/----------------------------------------- 限制堆栈的大小
#include <stack>
#include <list>
#include <iostream>
#define STACK_SIZE  100   // 堆栈最大容量
using namespace std;
int main()
{// 用双向链表作堆栈的底层结构stack<int, list<int> >   s; // 堆栈未满,元素才能入栈if (s.size() < STACK_SIZE)s.push(68);if (s.size() < STACK_SIZE)s.push(1);if (s.size() < STACK_SIZE)s.push(17);// 元素出栈while (!s.empty()){// 打印 17 1 68cout << s.top() << endl;s.pop();}return 0;
}

----------------------- stack 小结
    堆栈是一种应用非常广泛的数据结构。C++ STL 将这种数据结构和它若干受限制操作用泛型类 stack 容器封装出来,包括堆栈初始化、元素入栈、取栈顶元素、元素出栈、判断堆栈是否非空和取得当前堆栈大小等,应用起来十分容易。
    stack的元素出栈操作是不返回栈顶元素的,需要另外通过取栈顶函数获得。这种分离实现是考虑到出栈函数若直接返回栈顶元素,将会导致返回值的数据引用安全问题或不必要的低效复制函数的调用。
    
    从 stack 内部实现看,stack 堆栈是不设最大容量的,但可通过 size 函数获取当前堆栈的大小,以判断是否允许继续让元素入栈,实现具有最大容量限制的堆栈。

c++ stl栈容器stack用法介绍相关推荐

  1. cqueue结构pop_c++ stl栈容器stack的pop(),push()等用法介绍及头文件

    C++ Stack(堆栈) 是一个容器类的改编,为程序员提供了堆栈的全部功能,--也就是说实现了一个先进后出(FILO)的数据结构. c++ stl栈stack的头文件为: #include c++ ...

  2. STL之容器stack

    目录 栈的底层实现原理 1. stack定义和初始化 2.stack的赋值 3. stack进栈和出栈 4. stack判空和大小 5. 注意事项(附加) 欢迎关注微信公众号 "三贝勒文子& ...

  3. C++(STL):24 ---序列式容器stack用法

    1.stack的定义 要使用stack,应先添加头文件#include <stack>, 并在头文件下面加上 "using namespace std" //定义 st ...

  4. C++ STL 线性容器的用法

    vector vector 是顺序容器的一种,是可变长的动态数组,支持随机访问迭代器,所有stl算法都能对 vector 进行操作. vector 容器在实现时,动态分配的存储空间一般都大于存放元素所 ...

  5. c++ stl容器vector删除(erase),遍历等基本用法介绍及头文件

    Vectors 包含着一系列连续存储的元素,其行为和数组类似.访问Vector中的任意元素或从末尾添加元素都可以在常量级时间复杂度内完成,而查找特定值的元素所处的位置或是在Vector中插入元素则是线 ...

  6. C++小课堂:STL中的栈容器(stack)

    栈很像我们的箱子,我们将衣服这些装进箱子,第一个拿出来的肯定是最顶上的那件衣服,栈也一样. 今天我们就来学习栈容器:stack 头文件:<stack> 之前介绍的vector其实是STL中 ...

  7. oracle erase,c++ stl容器vector删除(erase),遍历等基本用法介绍及头文件

    Vectors 包含着一系列连续存储的元素,其行为和数组类似.访问Vector中的任意元素或从末尾添加元素都可以在常量级时间复杂度内完成,而查找特定值的元素所处的位置或是在Vector中插入元素则是线 ...

  8. C++STL之stack栈容器

    C++STL之stack栈容器 1. 再谈栈 回顾一下之前所学的栈,栈是一种先进后出的数据结构,而实现方式需要创建多个结构体,通过链式的方式进行实现,这是标准的栈的思路,而在STL中栈可以以更为简单的 ...

  9. C++ STL之stack栈容器

    一.STL: 1)标准模版库,提供了通用的模版库和函数.如:向量.链表.队列.栈. 2)核心组建包括:容器(Containers).算法(Algorithms).迭代器(Iterators). 二.S ...

最新文章

  1. python相对路径库_如何最简单、通俗地理解Python的搜索路径、相对路径、绝对路径?...
  2. 自创数据集,用TensorFlow预测股票教程 !(附代码)
  3. MATLAB符号计算
  4. Selenium3自动化测试——4. 获取百度备案信息
  5. 《流浪地球》是一部违反科学常识的大烂片
  6. mysql索引空间配置_加入空间mysql索引
  7. Oracle中row_number()、rank()、dense_rank() 的区别
  8. 4.3.6无分类编址CIDR(构成超网)
  9. 2013年11月19日
  10. 遇见未来 | MongoDB增强事务支持,向NewSQL的方向迈进
  11. Django - 两周从入门到熟练工
  12. swing Ctrl+S 保存配置
  13. 将DataGrid中的数据导出为Excel的方法
  14. pip安装环境报错[Errno 99] Cannot assign requested address问题解决
  15. 基于 DHT 网络的磁力链接和BT种子的搜索引擎架构
  16. 微服务结合领域驱动设计落地
  17. [存档]使用CxServer的7个战略原因
  18. 成功解决 ValueError: Shape of passed values is (3, 1), indices imply (3, 3)
  19. 泰坦尼克号Python数据分析
  20. 堆分配存储结构串的实现|C++

热门文章

  1. jquery中的循环技巧
  2. modprobe:FATAL:module xxx not found
  3. I2C总线读取MPU6050
  4. About TexturePacker
  5. HTML代码via浏览器logo,Via浏览器怎么定制首页 几步轻松完成
  6. vsto下开发wps插件
  7. 【C++】如何阅读别人的代码?如何阅读别人的C++代码?如何高效学习他人代码
  8. 如何把pdf文件放到服务器,将生成的PDF文件存储在服务器上
  9. 5G工业路由器PLC无线组网远程控制
  10. 计算机一级题库ps视频,2016年国家计算机一级Photoshop题库及答案