c++ stlstack介绍

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

c++ stl栈stack的头文件:

#include <stack>

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

操作 比较和分配堆栈

empty() 堆栈为空则返回真

pop() 移除栈顶元素

push() 在栈顶增加元素

size() 返回栈中元素数目

top() 返回栈顶元素

stack 介绍

栈是一种容器适配器,特别为后入先出而设计的一种(LIFO ),那种数据被插入,然后再容器末端取出

栈实现了容器适配器,这是用了一个封装了的类作为他的特定容器,提供了一组成员函数去访问他的元素,元素从特定的容器,也就是堆栈的头取出袁术。

这个基础的容器可能是任何标准的容器类,和一些其他特殊设计的模板类,唯一的要求就是要支持一下的操作

  1. <span style="font-size:16px;"><strong>•</strong>back()
  2. •push_back()
  3. •pop_back()</span>

因此,标准的容器类模板vectordeque 和list可以使用,默认情况下,如果没有容器类被指定成为一个提别的stack 类,标准的容器类模板就是deque 队列。

实现C++  STL,栈有两个参数。

 
template < class T, class Container = deque<T> > class stack;

参数示意:

  • T: 元素类型
  • Container: 被用于存储和访问元素的的类型

成员函数

stack::stack

explicit stack ( const Container& ctnr = Container() );

用于构造一个栈适配器对象。

ctnr
Container object
Container is the second class template parameter (the type of the underlying container for thestack; by default: deque<T>, see class description).
  1. // test_stack.cpp : 定义控制台应用程序的入口点。
  2. //
  3. #include "stdafx.h"
  4. #include <stack>
  5. #include <vector>
  6. #include <deque>
  7. #include <iostream>
  8. using namespace std;
  9. int _tmain(int argc, _TCHAR* argv[])
  10. {
  11. deque<int> mydeque(2,100);
  12. vector<int> myvector(2,200);
  13. stack<int> first;
  14. stack<int> second(mydeque);
  15. stack<int,vector<int> > third;
  16. stack<int,vector<int> > fourth(myvector);
  17. cout << "size of first: " << (int) first.size() << endl;
  18. cout << "size of second: " << (int) second.size() << endl;
  19. cout << "size of third: " << (int) third.size() << endl;
  20. cout << "size of fourth: " << (int) fourth.size() << endl;
  21. return 0;
  22. }

output:

size of first: 0
size of second: 3
size of third: 0
size of fourth: 2

stack::empty

bool empty ( ) const;

判断是否为空。

Return Value

true if the container size is 0false otherwise.

  1. // stack::empty
  2. #include <iostream>
  3. #include <stack>
  4. using namespace std;
  5. int main ()
  6. {
  7. stack<int> mystack;
  8. int sum (0);
  9. for (int i=1;i<=10;i++) mystack.push(i);
  10. while (!mystack.empty())
  11. {
  12. sum += mystack.top();
  13. mystack.pop();
  14. }
  15. cout << "total: " << sum << endl;
  16. return 0;
  17. }

Output:

total: 55

stack::pop

void pop ( );

在栈的顶部移除元素。

  1. // stack::push/pop
  2. #include <iostream>
  3. #include <stack>
  4. using namespace std;
  5. int main ()
  6. {
  7. stack<int> mystack;
  8. for (int i=0; i<5; ++i) mystack.push(i);
  9. cout << "Popping out elements...";
  10. while (!mystack.empty())
  11. {
  12. cout << " " << mystack.top();
  13. mystack.pop();
  14. }
  15. cout << endl;
  16. return 0;
  17. }

Output:

Popping out elements... 4 3 2 1 0

stack::push

 
void push ( const T& x );

在栈顶添加元素

  1. // stack::push/pop
  2. #include <iostream>
  3. #include <stack>
  4. using namespace std;
  5. int main ()
  6. {
  7. stack<int> mystack;
  8. for (int i=0; i<5; ++i) mystack.push(i);
  9. cout << "Popping out elements...";
  10. while (!mystack.empty())
  11. {
  12. cout << " " << mystack.top();
  13. mystack.pop();
  14. }
  15. cout << endl;
  16. return 0;
  17. }

Output:

Popping out elements... 4 3 2 1 0

stack::size

 
 
size_type size ( ) const;

计算栈对象元素个数

  1. // stack::size
  2. #include <iostream>
  3. #include <stack>
  4. using namespace std;
  5. int main ()
  6. {
  7. stack<int> myints;
  8. cout << "0. size: " << (int) myints.size() << endl;
  9. for (int i=0; i<5; i++) myints.push(i);
  10. cout << "1. size: " << (int) myints.size() << endl;
  11. myints.pop();
  12. cout << "2. size: " << (int) myints.size() << endl;
  13. return 0;
  14. }

Output:

0. size: 0
1. size: 5
2. size: 4

stack::top

 
 
      value_type& top ( );
const value_type& top ( ) const;

返回栈顶元素

  1. // test_stack.cpp : 定义控制台应用程序的入口点。
  2. //
  3. #include "stdafx.h"
  4. #include <stack>
  5. #include <vector>
  6. #include <deque>
  7. #include <iostream>
  8. using namespace std;
  9. int _tmain(int argc, _TCHAR* argv[])
  10. {
  11. stack<int> mystack;
  12. mystack.push(10);
  13. mystack.push(20);
  14. mystack.top()-=5;
  15. cout << "mystack.top() is now " << mystack.top() << endl;
  16. return 0;
  17. }

Output:

mystack.top() is now 15

10-stack的更多相关文章

  1. [CareerCup] 9.10 Stack Boxes 垒箱子问题

    9.10 You have a stack of n boxes, with widths w., heights hir and depths drThe boxes cannot be rotat ...

  2. 给jdk写注释系列之jdk1.6容器(10)-Stack&Vector源码解析

    前面我们已经接触过几种数据结构了,有数组.链表.Hash表.红黑树(二叉查询树),今天再来看另外一种数据结构:栈.      什么是栈呢,我就不找它具体的定义了,直接举个例子,栈就相当于一个很窄的木桶 ...

  3. C# 队列(Queue)和 堆栈(Stack)

    C# 队列(Queue)和 堆栈(Stack) C# 队列(Queue) 队列(Queue)代表了一个先进先出的对象集合.当您需要对各项进行先进先出的访问时,则使用队列.当您在列表中添加一项,称为入队 ...

  4. 在 WPF 程序中应用 Windows 10 真?亚克力效果

    原文:在 WPF 程序中应用 Windows 10 真?亚克力效果 从 Windows 10 (1803) 开始,Win32 应用也可以有 API 来实现原生的亚克力效果了.不过相比于 UWP 来说, ...

  5. 1057 Stack

    Stack is one of the most fundamental data structures, which is based on the principle of Last In Fir ...

  6. Go语言的堆栈分析

    本文为理解翻译,原文地址:http://www.goinggo.net/2015/01/stack-traces-in-go.html Introduction 在Go语言中有一些调试技巧能帮助我们快 ...

  7. 可爱的Python_课后习题_CDay−2 完成核心功能

    1. 在前文的grep 实现例子中,没有考虑子目录的处理方式,因为如果直接open 目录进行读grep 是古老实用且高效的模式文本匹配工具,在所有的Unix/Linux 系统中都会默认安装,它最常做的 ...

  8. 【转】 C++模板详解

    C++模板 模板是C++支持参数化多态的工具,使用模板可以使用户为类或者函数声明一种一般模式,使得类中的某些数据成员或者成员函数的参数.返回值取得任意类型. 模板是一种对类型进行参数化的工具: 通常有 ...

  9. jdk 编译器 对final字段的处理

    class FinalTest{     void a(){         final int i=10;         int j=10;     } }            stack=2, ...

  10. CareerCup All in One 题目汇总 (未完待续...)

    Chapter 1. Arrays and Strings 1.1 Unique Characters of a String 1.2 Reverse String 1.3 Permutation S ...

随机推荐

  1. Redis客户端基本命令

    更多命令请进入官网查询:https://redis.io/commands 一.基础命令 1.连接服务端 redis-cli 或 redis-cli -h ip地址 -p 端口 2.选择数据库 Red ...

  2. C# WMP 视频播放

    1. C#播放器控件常用的方法介绍 右击工具箱->选择项(I)... -> 显示"选择工具箱项" -> COM组件 -> Windows Media Pla ...

  3. Unit04: 实战技巧 、 登录

    Unit04: 实战技巧 . 登录 使用注解方式简化Unit04的小程序. 1. 基于注解的springmvc应用程序的开发 (1)编程步骤 step1. 导包. step2. 添加spring配置文 ...

  4. CentOS 7 named设置主从复制

    前两篇文章介绍了named的安装和配置forward. 本文将介绍named的主从复制. 在从named的配置中添加: zone "weiheng.ink" IN { type s ...

  5. 数据库表数据传输到Oracle方案

    方案步骤为:数据导出到文件(增量或全量),通知接口文件就绪(上传到ftp或提供下载url),接收方下载文件,解析文件并入库.Oracle需要建立对应的临时表和正式表,入库步骤为:清空临时表,批量插入数 ...

  6. android 网络连接判断

    Android 网络判断类,用来判断网络状态 使用方法: (1)先初始化 //初始化网络状态检测类 NetworkStateManager.instance().init(this); (2)判断是否 ...

  7. 第八章 搭建hadoop2.2.0集群,Zookeeper集群和hbase-0.98.0-hadoop2-bin.tar.gz集群

    安装配置jdk,SSH 一.首先,先搭建三台小集群,虚拟机的话,创建三个 下面为这三台机器分别分配IP地址及相应的角色:集群有个特点,三台机子用户名最好一致,要不你就创建一个组,把这些用户放到组里面去 ...

  8. [置顶] ubuntu版本很老,apt-get update更新失败时(W: Failed to fetch ...)------如何创建新的sources.list

    在说这个解决方案之前,我先说下,目前遇到的问题: 我使用 sudo apt-get update 之后,更新失败.具体原因如下: W: Failed to fetch http://cn.archiv ...

  9. PHP中的traits简单理解

    Traits可以理解为一组能被不同的类都能调用到的方法集合,但Traits不是类!不能被实例化.先来例子看下语法: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 1 ...

  10. 敌兵布阵hdu1166

    /* 敌兵布阵 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submi ...