C++中栈和队列、set、vector的基本使用方法

2023-11-08

在算法中栈和队列的使用的频繁的,在学习算法的过程中栈、队列、set、vector的使用方法我们一定要掌握。
在C++中栈和队列、set、vector已经被封装好了,我们可以直接通过以下步骤调用栈和队列:

1.相关头文件

包含栈头文件:#include< stack >
包含队列头文件:#include< queue >
包含set头文件:#include< set >
包含vector头文件:#include< vector >

2.相关定义方式

定义 栈:stack< 类型 > stk;
定义 队列: queue< 类型 > q;
定义 set:set<类型>t;
定义 vector:vertor < 类型 > v;
(ps:类型为int、char等)

3.相关操作

栈提供了如下的操作:
(1)stk.empty() :如果栈为空返回true,否则返回false。
(2)stk.size():返回栈中元素的个数。
(3)stk.pop():删除栈顶元素,但不返回其值。
(4)stk.top():返回栈顶元素,但不删除该元素。
(5)stk.push():在栈顶压入新元素。

//栈代码
#include<bits/stdc++.h>
#include<stack>
using namespace std;

int main()
{
	stack<int>stk;
	cout << "栈的相关操作" << endl; 
	cout << "栈是否为空:" << stk.empty() << endl;
	stk.push(100);
	stk.push(50); 
	cout << "将先压入栈100、后压入栈50后栈顶元素:" <<
	stk.top() << endl;
	cout << "栈的大小为:" << stk.size() << endl; 
	stk.pop();
	cout << "弹栈一次后,栈顶元素为:" << stk.top() << endl;
	cout << "栈的大小为:" << stk.size() << endl; 
	
	return 0;
} 

栈代码实现

队列提供了如下操作:
(1)q.empty():如果队列为空返回true,否则返回false。
(2)q.size():返回队列中的元素个数。
(3)q.pop():删除队列首元素但不返回其值。
(4)q.front():返回队首元素的值,但不删除该元素。
(5)q.push():在队尾压入新元素。
(6)q.back():返回队列尾元素的值,但不删除该元素。

//队列代码
#include<bits/stdc++.h>
#include<queue>
using namespace std;

int main()
{
	queue<int>q;
	cout << "队列的相关操作" << endl; 
	cout << "队列是否为空:" << q.empty() << endl;
	q.push(100);
	q.push(50); 
	cout << "将先将100入队、后将50入队后队首元素:" <<
	q.front() << "  队尾元素:" << q.back() << endl;
	cout << "队列的大小:" << q.size() << endl; 
	q.pop();
	cout << "出队一次后,队首元素:" << q.front() <<
	"  队尾元素:" << q.back() << endl;
	cout << "队列的大小:" << q.size() << endl; 
	
	return 0;
}

队列代码实现
set提供了如下操作:
(1)t.begin() 返回指向第一个元素的迭代器。
(2)t.clear() 清除所有元素。
(3)t.count() 返回某个值元素的个数。
(4)t.empty() 如果集合为空,返回true(真)。
(5)t.end() 返回指向最后一个元素之后的迭代器,不是最后一个元素。
(6)t.erase() 删除集合中的元素。
(7)t.find() 返回一个指向被查找到元素的迭代器。
(8)t.insert() 在集合中插入元素。
(9)t.max_size() 返回集合能容纳的元素的最大限值。
(10)t.size() 集合中元素的数目。
(11)t.swap() 交换两个集合变量。
set放入一个元素就会调整这个元素的位置,把它放到合适的位置,所以set中只有一个insert插入操作,而且set不能保存相同的元素。
参考资料:博客园——C++中栈和队列的使用方法
(https://www.cnblogs.com/qujunhui/p/10360628.html)

vector提供了如下操作:
(1)v.push_back(a):尾部插入元素。
(2)cout<<v[0]<<endl:使用下标访问元素。
(3)v.insert(v.begin()+i,a):中间插入元素。
(4)v.erase(v.begin()+2):删除元素。
(5)v.erase(v.begin()+i,v.end()+j):删除区间[i,j-1];区间从0开始。
(6)v.size():v中元素个数。
(7)v.clear():清空v。
(8)v.resize(n):重新设置vector中元素个数为 n ,多余部分直接销毁,空缺部分直接设置为默认值。
(9)v.resize(n, val):重新设置vector中元素个数为 n ,空缺部分直接设置为 val。
vector参考

如果觉得该文章对你有用的话,留给赞呗!

感谢关注~

被代码吃了

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++中栈和队列、set、vector的基本使用方法 的相关文章

  • 向进度条添加百分比文本 C#

    我有一个方法可以显示进程栏何时正在执行以及何时成功完成 我工作得很好 但我想添加一个百分比 如果完成 则显示 100 如果卡在某个地方 则显示更少 我在网上做了一些研究 但我无法适应我正在寻找的解决方案 这是我的代码 private voi
  • 未提供参数时如何指定 C# System.Commandline 行为?

    在我的控制台应用程序中 当未提供控制台参数时 将执行我指定列表 在本例中为参数 3 的任何处理程序 调用该处理程序时 布尔参数设置为 false 但对我来说 根本不调用它更有意义 如何防止这种情况发生并显示帮助文本 using System
  • Directory.Delete 之后 Directory.Exists 有时返回 true ?

    我有非常奇怪的行为 我有 Directory Delete tempFolder true if Directory Exists tempFolder 有时 Directory Exists 返回 true 为什么 可能是资源管理器打开了
  • 确保 StreamReader 不会挂起等待数据

    下面的代码读取从 tcp 客户端流读取的所有内容 并且在下一次迭代中它将仅位于 Read 上 我假设正在等待数据 我如何确保它不会在没有任何内容可供读取时返回 我是否必须设置低超时 并在失败时响应异常 或者有更好的办法吗 TcpClient
  • 在 DataView 的 RowFilter 中选择 DISTINCT

    我试图根据与另一个表的关系缩小 DataView 中的行范围 我使用的 RowFilter 如下 dv new DataView myDS myTable id IN SELECT DISTINCT parentID FROM myOthe
  • 使用 Newtonsoft 和 C# 反序列化嵌套 JSON

    我正在尝试解析来自 Rest API 的 Json 响应 我可以获得很好的响应并创建了一些类模型 我正在使用 Newtonsoft 的 Json Net 我的响应中不断收到空值 并且不确定我的模型设置是否正确或缺少某些内容 例如 我想要获取
  • 如何使用 LINQ2SQL 连接两个不同上下文的表?

    我的应用程序中有 2 个数据上下文 不同的数据库 并且需要能够通过上下文 B 中的表的右连接来查询上下文 A 中的表 我该如何在 LINQ2SQL 中执行此操作 Why 我们正在使用 SaaS 产品来跟踪我们的时间 项目等 并希望向该产品发
  • qdbusxml2cpp 未知类型

    在使用 qdbusxml2cpp 程序将以下 xml 转换为 Qt 类时 我收到此错误 qdbusxml2cpp c ObjectManager a ObjectManager ObjectManager cpp xml object ma
  • 从 Linux 内核模块中调用用户空间函数

    我正在编写一个简单的 Linux 字符设备驱动程序 以通过 I O 端口将数据输出到硬件 我有一个执行浮点运算的函数来计算硬件的正确输出 不幸的是 这意味着我需要将此函数保留在用户空间中 因为 Linux 内核不能很好地处理浮点运算 这是设
  • 我可以使用 moq Mock 来模拟类而不是接口吗?

    正在经历https github com Moq moq4 wiki Quickstart https github com Moq moq4 wiki Quickstart 我看到它 Mock 一个接口 我的遗留代码中有一个没有接口的类
  • DbContext 和 ObjectContext 有什么区别

    From MSDN 表示工作单元和存储库模式的组合 使您能够查询数据库并将更改分组在一起 然后将这些更改作为一个单元写回存储 DbContext在概念上类似于ObjectContext 我虽然DbContext只处理与数据库的连接以及针对数
  • 如何在 32 位或 64 位配置中以编程方式运行任何 CPU .NET 可执行文件?

    我有一个可在 32 位和 64 位处理器上运行的 C 应用程序 我试图枚举给定系统上所有进程的模块 当尝试从 64 位应用程序枚举 32 位进程模块时 这会出现问题 Windows 或 NET 禁止它 我认为如果我可以从应用程序内部重新启动
  • 等待进程释放文件

    我如何等待文件空闲以便ss Save 可以用新的覆盖它吗 如果我紧密地运行两次 左右 我会得到一个generic GDI error
  • 动态添加 ASP.Net 控件

    我有一个存储过程 它根据数据库中存储的记录数返回多行 现在我想有一种方法来创建 div 带有包含该行值的控件的标记 如果从数据库返回 10 行 则 10 div 必须创建标签 我有下面的代码来从数据库中获取结果 但我不知道如何从这里继续 S
  • 将 MQTTNet 服务器与 MQTT.js 客户端结合使用

    我已经启动了一个 MQTT 服务器 就像this https github com chkr1011 MQTTnet tree master例子 该代码托管在 ASP Net Core 2 0 应用程序中 但我尝试过控制台应用程序 但没有成
  • 如何在非控制台应用程序中查看 cout 输出?

    输出到调试窗口似乎相当繁琐 我在哪里可以找到cout如果我正在编写非控制台信息 则输出 Like double i a b cout lt lt b lt lt endl I want to check out whether b is z
  • 方法优化 - C#

    我开发了一种方法 允许我通过参数传入表 字符串 列数组 字符串 和值数组 对象 然后使用这些参数创建参数化查询 虽然它工作得很好 但代码的长度以及多个 for 循环散发出一种代码味道 特别是我觉得我用来在列和值之间插入逗号的方法可以用不同的
  • C++ 条件编译

    我有以下代码片段 ifdef DO LOG define log p record p else define log p endif void record char data 现在如果我打电话log hello world 在我的代码中
  • 我的班级应该订阅自己的公共活动吗?

    我正在使用 C 3 0 遵循标准事件模式我有 public event EventHandler
  • 使用 .NET Process.Start 运行时挂起进程 - 出了什么问题?

    我在 svn exe 周围编写了一个快速而肮脏的包装器来检索一些内容并对其执行某些操作 但对于某些输入 它偶尔会重复挂起并且无法完成 例如 一个调用是 svn list svn list http myserver 84 svn Docum

随机推荐

  • docker 简单运用,使用阿里镜像

    第一步 确定docker已经安装 第二步 去阿里上搜索镜像 找到你想要的镜像 然后点击详细中有命行 如下 注意后面加版本号 如 V1 0 docker pull registry cn hangzhou aliyuncs com kenny
  • 【JavaEE】线程安全

    文章目录 1 前言 2 线程安全的概念 3 造成线程不安全的原因 4 如何解决出现的线程不安全问题 4 1 如何使用 synchronized 加锁 4 2 解决上面自增问题导致的线程安全问题 5 synchronized 的特性 5 1
  • STM32 输入捕获的脉冲宽度及频率计算

    输入捕获模式可以用来测量脉冲宽度或者测量频率 STM32 的定时器 除了 TIM6 和 TIM7 其他定时器都有输入捕获功能 以下是对脉冲宽度及频率的计算 1 脉冲宽度 如下图所示 采集该高电平脉冲的宽度 只需要进入输入捕获上升沿检测 记录
  • 查看文件中关键字前后几行的内容

    有时候文件太大 我们无法全部看完 去查找我们想要的内容 这时我们需要linux命令来查看某个关键字前后几行的内容 grep 使用linux的help命令 如下图 我们可以看到grep的用法 这里我们关注关键字前后的显示问题 以文件test
  • elk多项目收集

    1 filebeat配置 gt etc filebeat filebeat yml filebeat prospectors type log enabled true paths root project logs all all log
  • BACnet MSTP协议485功能测试

    文章目录 BACnet MSTP协议485功能测试 一 命令行运行方法 二 测试工具 1 使用sscom串口助手 2 使用yabe查看结果 三 代码部分 1 包含头文件 2 变量和宏定义 2 RS485配置函数 3 RS485初始化函数 使
  • 【容器适配器的认识与模拟】

    目录 前言 一 引入 二 容器适配器 一 stack deque stack模拟实现 二 queue queue模拟实现 为什么栈和队列要使用deque 三 priority queue priority queue模拟实现 总结 前言 打
  • AngularJS 学习笔记(四)--- 表单验证和常用API

    一 表单验证 1 概念 AngularJS 表单和控件可以对输入的数据进行验证 并对用户输入的非法数据进行警告 一般来说就算前端进行了验证 后端为了安全还是要再次进行验证 HTML5的表单本身带有一定的验证能力 可以与 AngularJS
  • 最新JetBrains PyCharm 使用教程--常用快捷键和设置PyCharm为Eclipse快捷键(四)

    PyCharm常用快捷键使用 Ctrl D 复制当前行 Ctrl Y 删除当前行 Ctrl Z 撤销 Shift Enter 快速换行 Ctrl 快速注释 Ctrl F 查找 Ctrl H 替换 Tab 缩进 Shift Tab 取消缩进
  • nginx 转发webSocket连接请求

    一 导读 nginx 是一个反向代理的轻量服务器 能对http请求进行转发 但是最新学习websocket发现 普通的nginx转发http请求时候无法转发websocket请求 今天就来介绍一下nginx如何转发websocket请求 与
  • 初识上下文切换

    上下文切换 什么是上下文切换 在单个处理器时期 操作系统就能够多线程并发执行任务 处理器给每个线程分配CPU时间片 线程在分配的时间片内执行任务 CPU时间片是CPU分配给每个线程执行的时间片段 一般几十毫秒 在这么短的时间里线程互相切换
  • 如何在excel中单独冻结多行或多列

    方法 1 首先打开相应的excel表格 确定要冻结的冻结的多行或多列 下面以冻结多行为例 先在界面上找到 视图 冻结窗格 最后找到 冻结首行 2 点击 冻结首行 后 在表格第一行下面会出现一条细实线 此时再点击 拆分 选项 3 拆分后 细实
  • 通过浏览器控制台使用js脚本进行浏览器操作(定时点击等)

    进行此操作前我们首先需要了解js编程语言 了解之后我们就可以去操作了 这里我们拿csdn评论举例子 点开评论界面右键审查元素 此时我们需要找到输入框dom和评论按钮dom 点击元素之后点击箭头然后去界面上选中文本框核按钮 然后我们就可以知道
  • 解决VSCODE 因为在此系统上禁止运行脚本 报错

    文章转载自 https blog csdn net larpland article details 101349586 学习react的时候 在VSCODE中使用yarn 结果报错 找了下原因 是因为PowerShell执行策略的问题 解
  • 基于matlab的人脸识别算法

    基于matlab的人脸识别算法 1 主成分的数目的选取 前已指出 设有p个随机变量 便有p个主成分 由于总方差不增不减 C1 C2等前几个综合变量的方差较大 而Cp Cp 1等后几个综合变量的方差较小 严格说来 只有前几个综合变量才称得上主
  • VC++ 隐藏控制台程序窗口

    转自 http hi baidu com sicceer blog item d9c35a810d15c4c8bc3e1ec8 html 设置 pragma comment linker subsystem windows entry ma
  • 2021年总结和2022年规划(全面进行,take it easy)

    先说下为啥要take it easy 算了笔账 如果今年就此失业 还有4200房贷 但是planb就是终身每月9200 还剩下5000 足够买菜自由了 所以控制消费欲望即可 别人是先编程到挣够后半辈子的钱 而我是逆行 先挣够后半辈子的钱再编
  • anaconda换清华镜像源(Windows)

    第一步 在C Users 用户名 下输入如下图所示的命令 conda config set show channel urls yes 第二步 在下图路径 找到如下图蓝色标记的文件 第三步 用记事本打开上一步找到的文件 将里面的内容完全替换
  • 解决1130 - Host ‘172.17.0.1‘ is not allowed to connect to this MySQL server

    1 docker pull mysql 安装mysql 2 启动mysql容器 docker run name mysql p 3306 3306 e MYSQL ROOT PASSWORD 123456 d mysql 使用Navicat
  • C++中栈和队列、set、vector的基本使用方法

    在算法中栈和队列的使用的频繁的 在学习算法的过程中栈 队列 set vector的使用方法我们一定要掌握 在C 中栈和队列 set vector已经被封装好了 我们可以直接通过以下步骤调用栈和队列 1 相关头文件 包含栈头文件 includ