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. 【常见Web应用安全问题】---4、Directory traversal

    Web应用程序的安全性问题依其存在的形势划分,种类繁多,这里不准备介绍所有的,只介绍常见的一些.  常见Web应用安全问题安全性问题的列表: 1.跨站脚本攻击(CSS or XSS, Cross Si ...

  2. 1.JMeter===添加响应断言

    断言即Lr中的检查点,我们在进行测试时,需要对每次请求测试的返回做检验 1.以百度做案例,添加线程组==添加HTTP请求==添加查看结果树 2.在HTTP请求下添加响应断言 注:模式匹配规则,比较常用 ...

  3. JMeter代码小Demo(Java)

    一.使用Eclipse进行项目编写 1.使用eclipse,新建项目名字为:TestNumber,包名为:test,类名为:TestNum 2.在JMeter的安装目下下lib/ext中copy2个j ...

  4. [转]C#在WinForm下使用HttpWebRequest上传文件并显示进度

    /// <summary> /// 将本地文件上传到指定的服务器(HttpWebRequest方法) /// </summary> /// <param name=&qu ...

  5. java的日期

    直接看例子: import java.text.DateFormatSymbols; import java.util.Calendar; import java.util.GregorianCale ...

  6. Google Cloud IAM中添加自定义域名

    Google Cloud支持在IAM中加入自定义域名.具体方法如下: 1. 登录Google Cloud Console,点击IAM和管理,进入身份和组织 2. 点击注册 3. 会重定向到Gmail到 ...

  7. 怎样用java生成GUID与UUID

    GUID是一个128位长的数字,一般用16进制表示.算法的核心思想是结合机器的网卡.当地时间.一个随机数来生成GUID.从理论上讲,如果一台机器每秒产生10000000个GUID,则可以保证(概率意义 ...

  8. (转)CentOS 7安装Zabbix 3.4

    (转)Zabbix 3.4 支持Centos 7.貌似不支持6.9. 更多详细内容请参考官方说明文档,详细的安装要求不贴出来了. https://www.zabbix.com/documentatio ...

  9. springmvc 打包遇到的问题

    1.测试有错误,过不去,mvn install -DSkipTests 2.设置resources路径,在pom.xml中添加 <build> <resources> < ...

  10. 使用product_user_profile来实现用户权限的设定

    我们有时候在以普通用户登录SQL*Plus的时候,会碰到下面的错误提示: Error accessing PRODUCT_USER_PROFILE Warning: Product user prof ...