c++ stl栈容器stack用法介绍

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 3
        cout << 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 68
        cout << s.top() << endl;
        s.pop();
    }

    return 0;
}


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

  • 47
    点赞
  • 128
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
本版本与网上其他资源不同之处在于,此版本可进行编辑,搜索,已进行内容识别扫描。可全选,可编辑,可剪切文字。 部分目录如下: 目录 第一篇预备知识 第1 章C++ 编程技术...................................................... 3 1-1 C++与C 语言的区别................................................... 4 1-1-1 文件扩展名的改变,.............................................. 4 1-1-2 简化输入/输出手段.............................................. 5 1-1-3 数据类型声明的改变,............................................ 5 1-1-4 动态内存分配运算符的使用....................................... 6 1-1-5 弓I 用(References) 类型, ··················•················•"'''8 1-1-6 const 语义的扩展................................................ 9 1-1-7 指针声明类型与对象类型相一致.................................. 13 1-1-8 int 与char 不再等价............................................. 13 1-1-9 结构数据类型的变化............................................ 13 1-1-10 数组和指针技术的不同......................................... 14 1-2 C++存储技术........................................................ 15 1-2 一I C++存储类型.................................................. 15 I6I7 ..... .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. •. .• •. .• .. .. .. .. .. .. .. .. .. .. .. .. . 期 符存 饰生 修的 取象 存对 廿廿 I2I32 ~3 c c 1-3 C++ 函数技术........................................................ 19 1-3-1 类的构造函数、析构函数与赋值函数,..... - ........ - .............. 19 1-3-2 在派生类中实现类的基本函数,................... _ ............... 29 1-3-3 内联函数技术,........ ................................... 30 3133 ..... .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. . 现 实 术的 技制 数机 函象 元对 友向 由 曰1. l -C 1 4 3337 ..... .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. . 术术 技技 承载 继重 的数 类函 l4l44 3 ~ 3840 ..... .. .. .. .. .. .. •. .• .. .. .. .. .. .. .. .. .. .. .. •. .• .. •. .• •. •• .• .. .. .. .. .. .. .. .. .. •. •• .• . 术 技 类 术象 技抽 载和 重数 符函 算虚 运纯 l4l34 4 1-5 小结...............................................
### 回答1: C++ STL容器中的stack)是一种后进先出(LIFO)的数据结构。的基本操作包括入(push)、出(pop)、查看顶元素(top)和判断是否为空(empty)。可以用数组或链表实现,但使用STL容器可以更方便地实现的操作。在STL中,是由适配器(adapter)stack实现的,可以使用push、pop、top和empty等成员函数来操作的应用场景包括函数调用、表达式求值、括号匹配等。 ### 回答2: stack)是C++ STL(标准模板库)中的一个容器,是一个后入先出(Last In, First Out,LIFO)的数据结构。堆的基本操作是退(Pop)和入(Push),即在顶插入和删除元素。除了这两个基本操作,堆还提供了访问顶元素的方法,即Top()。 堆可以通过STL中的std::stack<T>来使用,其中T是元素的类型。堆的定义非常简单,只需要使用一个std::stack<T>对象即可。在使用之前,需要包含头文件<stack>。 堆的主要特性是插入和删除元素的时间复杂度为常数时间O(1),因为只需要在顶进行操作。堆一般用于实现递归、表达式求值、内存分配等。例如,在递归深度优先搜索中,可以使用堆来存储遍历的路径。 堆的操作非常简单,以下是常用的操作列表: 1. push():将一个元素插入顶。 2. pop():删除顶元素。 3. top():返回顶元素。 4. empty():判断堆是否为空。 5. size():返回堆中元素的个数。 下面是一个简单的堆的例子,可以更好地理解堆的基本操作: #include <iostream> #include <stack> using namespace std; int main() { stack<int> s; // 定义一个int类型的 s.push(10); // 将10入 s.push(20); // 将20入 s.push(30); // 将30入 while (!s.empty()) { cout << s.top() << " "; // 输出顶元素 s.pop(); // 删除顶元素 } return 0; } 在上面的例子中,我们首先定义了一个堆s,然后在堆s中依次插入了三个元素10、20和30。接下来使用while循环,顶元素依次输出,同时删除顶元素,直到堆为空。由于堆是后进先出的,所以输出的顺序是30、20和10。 总之,堆是一个非常常用的数据结构,STL中的stack)提供了非常方便的使用,可以减轻我们对堆数据结构进行操作的负担,提高代码的可读性和复用性。 ### 回答3: stack)是 C++ STLStandard Template Library)中常见的一种容器数据结构,它可以在一端进行元素的插入和删除操作,遵循“后进先出”(LIFO,Last-In-First-Out)的原则。的操作不需要访问元素中间的部分,只需要在顶执行操作,保证了操作效率。可以用数组或链表等数据结构实现,但 C++ STL 提供了封装好的容器,使用起来方便且安全。 C++ STL容器的定义方式为:`std::stack`。默认情况下使用双端队列(deque)实现,用户也可以指定其他底层容器,如 vector、list 等。可以使用`push()`向顶插入元素,使用`pop()`弹出顶元素,使用`top()`获取顶元素。的元素个数可以使用`size()`来获取,判断是否为空可以使用`empty()`,在容器中查找某个元素的功能则不支持。 在实际应用中,容器可以用来实现函数的递归调用、表达式求值、括号匹配等操作。例如,可以使用来判断一个字符串中的括号是否匹配,具体做法是将左括号入,遇到右括号时弹出顶元素检查是否为相应的左括号。如果不匹配或者已经为空,则括号不匹配;如果字符串中所有的括号都匹配,则最后为空。 总之,作为一种容器数据结构,在实际应用中有着广泛的应用场景,C++ STL 提供的封装好的容器,具有使用方便、效率高等特点,可以帮助我们更快更方便地实现各种数据处理和算法设计。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值