STL常用容器—stack与queue容器(栈与队列)

STL常用容器—stack与queue容器(栈与队列)

  • stack容器
    • 1. stack容器模型图
    • 2. stack 基本概念
    • 3. stack 常用接口
  • queue 容器
    • 1. queue 容器模型图
    • 2. queue 基本概念
    • 3. queue 常用接口

参考博文1:<C++> stack与queue容器概念模型|常用接口汇总
参考博文2: STL常用容器——queue容器的使用

  本文主要介绍C++ STL中的stack和queue两大容器的基本概念与方法调用,不涉及具体的底层实现,若要了解堆栈的底层设计与程序实现,请参考数据结构与算法专栏中的:

  1. 数据结构与算法基础——栈的原理及C语言底层实现
  2. 数据结构与算法基础——队列原理及C语言底层实现

stack容器

1. stack容器模型图

2. stack 基本概念

  • stack是一种 先进后出 (First In Last Out,FILO)的数据结构,它只有一个出口。
  • 允许进行操作的一端称为“栈顶”,另一固定端称为“栈底”
  • 栈中进入数据称为 入栈 push,栈中弹出数据称为 出栈 pop
  • 栈中只有顶端的元素才可以被外界使用,因此栈不允许有遍历行为,也不提供迭代器
  • 使用stack容器需要引入头文件 #include <stack>
  • 能够判断容器是否为空和得到元素个数,通过入栈来计数,并不是对出栈计数
  • 当栈中没有元素时称为 “空栈

生活中的栈:

3. stack 常用接口

构造函数:

函数原型功能
stack<T> stk;stack采用模板类实现, stack对象的默认构造形式
stack(const stack &stk);拷贝构造函数

赋值操作:

  • stack& operator=(const stack &stk);   //已重载等号操作符

数据存取:

方法功能
push(elem);向栈顶一个元素
pop();从栈顶移除第一个元素,返回值为void
top( );返回栈顶元素

大小操作:

方法功能
empty( );判断堆栈是否为空
size( );返回栈的大小

示例:

#include <stack>

void stack_test()
{
	stack<int> s;	//定义栈
	
	//数据入栈
	s.push(10);
	s.push(20);
	s.push(30);
	s.push(40);

	cout << "栈的起始大小为: " << s.size() << endl;
	while(!s.empty())
	{
		//输出栈顶元素
		cout << "栈顶元素为: " << s.top() << endl;
		s.pop();	//出栈
	}
	
	cout << "栈的终止大小为: " << s.size() << endl;
}

总结:

  • 入栈 — push(x)
  • 出栈 — pop()
  • 返回栈顶 — top()
  • 判断栈是否为空 — empty()
  • 返回栈大小 — size()

queue 容器

1. queue 容器模型图

2. queue 基本概念

  • queue是一种先进先出(First In First Out,FIFO)的数据结构,它有两个出口
  • 队列容器规定从一端新增元素,从另一端移除元素
  • 允许进行插入操作的一端称为“队尾
  • 允许进行移除操作的一端称为“队头
  • 队列中只有队头和队尾才可以被外界使用,因此队列不允许有遍历行为,也不提供迭代器
  • 使用queue容器需要引入头文件 #include <queue>
  • 队列中插入数据称为 入队 push,移除称为 出队 pop
  • 能够判断容器是否为空和得到元素个数

生活中的队列:

3. queue 常用接口

  queuestack常用接口几乎一致,唯一不同的就是队列的队首和队尾与堆栈的栈顶表示有所不同

构造函数:

函数原型功能
queue<T> que;queue采用模板类实现,queue对象的默认构造形式
queue(const queue &que);拷贝构造函数

赋值操作:

  • queue& operator=(const queue &que);   // 已经重载等号操作符

数据存取:

方法功能
push(elem);往队尾添加元素
pop();从队头移除第一个元素,返回值为void
back( );返回最后一个元素
front( );返回第一个元素

大小操作:

方法功能
empty();判断队列是否为空
size( );返回队列的大小

示例代码:

#include <queue>

class Person
{
public:
	string name;
	int age;
	Person(string name,int age){
		this->name = name;
		this->age = age;
	}
};

void queue_test()
{
	queue<Person> sq;
	
	//实例化对象并入队
	Person p1("张三",18);
	Person p2("李四",22);
	Person p3("王五",20);
	Person p4("陈六",21);
	sq.push(p1);
	sq.push(p2);
	sq.push(p3);
	sq.push(p4);
	
	cout << "队列的起始大小为: " << sq.size() << endl;
	while(!sq.empty())
	{
		//获取队头信息
		cout << "name: "  << sq.front().name;
		cout << "\tage: " << sq.front().age << endl;
		sq.pop();	//出队
	}
	cout << "队列的终止大小为: " << sq.size() << endl;
}

总结:

  • 入队 — push
  • 出队 — pop
  • 返回队头元素 — front
  • 返回队尾元素 — back
  • 判断队是否为空 — empty
  • 返回队列大小 — size

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/345617.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

这种环境下腾讯64亿在北京拿地?

近期&#xff0c;金融市场出现较大波动&#xff0c;A股指数跌至2700点&#xff0c;同时恒生指数也下滑至15000点&#xff0c;引发了社会各界的关注和思考。与此同时&#xff0c;腾讯以64.2亿元拿下北京海淀区地块&#xff0c;马云和蔡崇信又增持阿里股票&#xff0c;这一系列的…

【Java网络编程01】网络原理初识

【Java网络编程01】网络原理初识 1. 网络通信基础概念 网络通信&#xff1a;网络互连的目的就是网络通信&#xff0c;即网络数据传输&#xff0c;再直白点而言就是不同主机的不同进程之间基于网络进行数据的传输交互。 那么&#xff0c;在组建的网络上有各种各样的主机&#…

【Conda】超详细的linux-conda环境安装教程

背景 最近被python各个版本环境整的头晕目眩&#xff0c;本来就不是专长做python的&#xff0c;切换各种版本着实不好操作&#xff0c;因此想到了conda这个好工具&#xff0c;以下是对conda的相关理解和搭建的详细过程&#xff0c;做个记录。 Conda简介 Conda是在Windows、m…

3.Eureka注册中心

3.Eureka注册中心 假如我们的服务提供者user-service部署了多个实例&#xff0c;如图&#xff1a; 大家思考几个问题&#xff1a; order-service在发起远程调用的时候&#xff0c;该如何得知user-service实例的ip地址和端口&#xff1f;有多个user-service实例地址&#xff0…

Redis - redis.windows.conf配置文件及RDB和AOF数据持久化方案

Redis - redis.windows.conf配置文件及RDB和AOF数据持久化方案 Redis的高性能是由于其将所有数据都存储在了内存中&#xff0c;为了使Redis在重启之后仍能保证数据不丢失&#xff0c;需要将数据从内存中同步到硬盘中&#xff0c;这一过程就是持久化。 Redis支持两种方式的持久化…

Vue 的 事件修饰符and按键修饰符

1、事件修饰符概览 修饰符说明 .prevent阻止默认事件 .stop阻止冒泡.once事件只触发一次 .capture 添加事件侦听器时使用事件捕获模式.self只有点击当前元素本身时才会触发回调.passive事件的默认行为立即执行&#xff0c;无需等待事件回调执行完毕(不常用).native 将vue组件…

【单例模式】保证线程安全实现单例模式

&#x1f4c4;前言&#xff1a;本文是对经典设计模式之一——单例模式的介绍并讨论单例模式的具体实现方法。 文章目录 一. 什么是单例模式二. 实现单例模式1. 饿汉式2. 懒汉式2.1 懒汉式实现单例模式的优化&#xff08;一&#xff09;2.2 懒汉式实现单例模式的优化&#xff08…

蓝桥杯官网填空题(01串的熵)

问题描述 答案提交 这是一道结果填空的题, 你只需要算出结果后提交即可。本题的结果为一 个整数, 在提交答案时只填写这个整数, 填写多余的内容将无法得分。 import java.util.*;public class Main {public static void main(String[] args) {for(double zero1;zero<2333…

开始学习vue2(Vue方法)

一、过滤器 过滤器&#xff08;Filters&#xff09;是 vue 为开发者提供的功能&#xff0c;常用于文本的格式 化。过滤器可以用在两个地方&#xff1a;插值表达式 和 v-bind 属性绑定。 过滤器应该被添加在 JavaScript 表达式的尾部&#xff0c;由“管道符 ”进行 调用&#…

【Linux】常见指令(二)

前言 常见指令第二部分。 文章目录 一、指令&#xff08;下&#xff09;重定向>&#xff1a;输出重定向>>&#xff1a;追加输出<&#xff1a;输入重定向 10. more—显示文本文件内容11.less—逐屏浏览文本文件内容12. head13. tail管道 |14. date—时间指令在这里插…

5个程序员可以接私活的平台和一些建议

22年之前我从没有接触过程序员外包接单&#xff0c;也没有任何的私活接单经验&#xff0c;就纯纯看自己瞎摸索&#xff0c;通过Google搜索&#xff0c;在各类程序员私活接单平台上摸爬滚打&#xff0c;硬是杀出一条血路&#xff0c;从一开始的年入3k到现在每月稳定收入1w&#…

STL第四讲

第四讲 万用Hash Function 左侧的是设计为类并重载调用运算符&#xff0c;右侧是一般函数的形势&#xff1b; 但是右侧形势在创建容器时更麻烦&#xff1b; 具体例子&#xff1a; 第三种形势&#xff1a;struct hash 偏特化形式 tuple 自C03引入&#xff1b; 关于源码解读的…

Xcode 15 libarclite 缺失问题

升级到Xcode 15运行项目报错&#xff0c;报错信息如下&#xff1a; SDK does not contain libarclite at the path /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/arc/libarclite_iphonesimulator.a; try increasing the minimum d…

2024年学鸿蒙开发有前途吗?

随着科技的不断发展和智能设备的普及&#xff0c;鸿蒙系统作为华为自主研发的操作系统&#xff0c;正逐渐受到市场的关注。2024年&#xff0c;学鸿蒙开发是否有前途&#xff0c;成为了很多开发者和学生关心的问题。本文将从多个角度分析鸿蒙系统的发展前景&#xff0c;以及学习…

elment-plus如何引入scss文件实现自定义主题色

elment-plus如何引入scss文件实现自定义主题色&#xff01;如果您想修改elementPlus的默认主题色调&#xff0c;使用自定义的色调&#xff0c;可以考虑使用官方提供的解决办法。 第一步你需要在项目内安装sass插件包。 npm i sass -D 如图&#xff0c;安装完成后&#xff0c;你…

Redisson 分布式锁解决主从一致性问题的原理

目录 一、主从不一致产生原因 二、Redisson 解决主从一致性的原理 一、主从不一致产生原因 1. Redis 主从集群&#xff1a;主从读写分离&#xff0c;主节点将数据同步给从节点 主节点&#xff1a;增删改从节点&#xff1a;读 2. 主从同步存在延迟&#xff0c;若主节点宕机…

Borze(与连续元素有关的题目)

总结&#xff1a;碰到与连续元素有关的题目&#xff0c;可以考虑在某种条件下加i&#xff1b;之类的。

valgrind使用

文章目录 简介安装如何使用valgrind来检测内存错误&#xff1f;如何使用其它的工具&#xff1f;总结 简介 Valgrind是一个工具集&#xff0c;包含了许多调试与性能分析的工具。其中使用最多的是Memcheck&#xff0c;它能帮你检测C/C中的内存问题&#xff0c;避免程序崩溃或不可…

JS之打地鼠案例

需要素材的同学可以私信我 效果图&#xff1a; 上代码&#xff1a; <!DOCTYPE html> <html> <head><meta charset"utf-8"><title></title><style>* {margin: 0;padding: 0;}.box {position: relative;width: 320px;heigh…