stack堆栈容器

堆栈是一种线性表,插入和删除操作只在表的一端进行,该端成为栈顶,另一端则称为栈底。元素的入栈和出栈都是在栈顶进行的,因此堆栈是一种后进先出表(LIFO)。C++ STL的堆栈泛化是通过现有的序列容器来实现的,默认使用的是双端队列deque的数据结构。在STL中,stack的元素出栈操作是不返回栈顶元素的,获得栈顶元素需要调用相应的取栈顶函数才能获得,这种分离的实现,是考虑到出栈函数若是直接返回栈顶元素,将会导致返回值的数据引用安全问题或者不必要的低效复制函数的调用。

创建stack对象

主要有以下两种方式。

(1)    stack()

stack<int> s;

(2)    stack(const stack&)

复制构造函数。

stack<int,list<int>> s1;

stack<int,list<int>> s2(s1);

元素入栈

入栈函数为push函数,C++的STL是不预设堆栈的大小的,入栈函数不考虑堆栈空间是否为满,均将元素压入堆栈。

stack<int> s;

s.push(1);

s.push(2);

s.push(3);

元素出栈

出栈函数为pop函数,该函数并没有判断堆栈是否为空,需要自行判断堆栈是否为空,才可以执行pop函数。

stack<int> s;

while(!s.empty())

{

s.pop();

}

取栈顶元素

堆栈stack容器的栈顶元素的读取函数为top函数,取栈顶元素也要判断堆栈是否为空,取出的栈顶元素才有意义。

cout<<s.top()<<endl;

s.pop();

栈顶判断是否为空利用函数empty。

#include<iostream>
#include<stack>
using namespace std;
int main()
{
	stack<int> s;
	s.push(1);
	s.push(2);
	s.push(3);
	s.push(4);
	s.push(5);
	while(!s.empty())
	{
		cout<<s.top()<<endl;//5、4、3、2、1
		s.pop();
	}
	return 0;
}

堆栈的大小

堆栈元素的个数可以用size函数来获得。

#include<iostream>
#include<stack>
#include<list>
#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(50);
	}
	if(s.size()<STACK_SIZE)
	{
		s.push(10);
	}
	while(!s.empty())
	{
		cout<<s.top()<<endl;//10/50/68
		s.pop();
	}
	return 0;
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-08-28 03:21:02

stack堆栈容器的相关文章

第18章 stack堆栈容器

/* 第18章 stack堆栈容器 18.1 stack技术原理 18.2 stack应用基础 18.3 本章小结 */ // 第18章 stack堆栈容器 // 18.1 stack技术原理 ------------ // 18.2 stack应用基础 --------------------------------------------------------------------------------- //268 #include <stack> #include <ios

堆栈容器

C++中的堆栈容器的操作包括进栈出栈,返回栈顶元素,返回栈中元素个数,判断栈是否为空等 #include<iostream>#include<stack> //使用堆栈必须包含头文件using namespace std;int main(){ stack<int>s; //定义一个堆栈容器 s.push(1); s.push(2); s.push(3); /*以上是元素进栈*/ cout << s.top() << endl;//读取栈顶元素

使用Stack堆栈集合大数据运算

使用Stack堆栈集合大数据运算 package com.sta.to; import java.util.Iterator; import java.util.Stack; public class DaMax { public void jiaFa(String value1, String value2) { /** * 更多资料欢迎浏览凯哥学堂官网:http://kaige123.com * @author 小沫 */ // 把字符串用toCharArray拆成字符 char[] c1

C# Stack堆栈的使用方法

堆栈(Stack)代表了一个后进先出的对象集合.当您需要对各项进行后进先出的访问时,则使用堆栈.当您在列表中添加一项,称为推入元素,当您从列表中移除一项时,称为弹出元素. Stack 类的方法和属性 下表列出了 Stack 类的一些常用的 属性: 属性 描述 Count 获取 Stack 中包含的元素个数. 下表列出了 Stack 类的一些常用的 方法: 序号 方法名 & 描述 1 public virtual void Clear(); 从 Stack 中移除所有的元素. 2 public v

leetcode_20题——Valid Parentheses(string,stack堆栈)

Valid Parentheses Total Accepted: 47887 Total Submissions: 180550My Submissions Question Solution Given a string containing just the characters '(', ')', '{', '}', '[' and ']', determine if the input string is valid. The brackets must close in the co

docker stack 部署容器监控方案(cAdvisor、Prometheus、Grafana)

=============================================== 2018/7/8_第1次修改                       ccb_warlock =============================================== 最近正式业务终于开始上容器,虽然前期通过swarm解决了服务部署和扩展等问题,但是针对容器监控方面缺乏经验甚至是无从入手,因为没有监控数据我根本不知道目前给的资源限制是否合理,业务量激增的时候资源是否可以支撑负

51单片机stack堆栈

一般编译器的堆栈用于保存局部变量.函数的参数.函数的返回值.中断上下文信息等.但Keil对局部变量.函数参数预先分配空间(放在静态全局变量区),Keil的堆栈只是用于保存函数嵌套调用的PC.中断上下文信息. 从主程序进入中断需要入栈字节数:13+PC=15 Byte(ACC,PSW,B,DPH,DPL,R0~R7) Keil支持2级中断15×2=30 Byte. 主程序中每级调用需要消耗2字节保存PC,如调用深度6级,需要6×2=12字节堆栈空间. Keil51 编译后会生成M51文件,查找?S

stl之stack容器

为了严格遵循堆栈数据后进先出原则,stack不提供元素的任何迭代操作,因此stack容器不会向外部提供可用的前向或反向迭代器类型. 头文件#include<stack> 创建stack对象 stack() 默认的构造函数,创建一个空的stack对象. stack<int> s; //使用默认的deque为底层容器,创建一个空的堆栈对象s. stack(const stack&) 复制构造函数,用一个stack堆栈创建一个新的堆栈. 元素入栈 stack堆栈容器的元素入栈函数

第0章 目录

  C++STL开发技术导引 第一篇 预备知识  第1章 C++编程技术  第2章 C++模板技术  第3章 C++ I/O流技术   第二篇 C++STL泛化技术基础  第4章 C++STL泛型库概述  第5章 C++STL泛化技术分析   第三篇 C++STL容器技术  第6章 vector向量容器  第7章 deque双端队列容器  第8章 list双向链表容器  第9章 slist单向链表容器  第10章 bit_vector位向量容器  第11章 set集合容器  第12章 multi