STL模板(一)向量、栈和队列

2023-10-31

一.vector-向量

1.定义:向量类型可以容纳许多类型的数据,被称为容器——可以当数组使用,可以随时增加或减少元素,内存连续,顺序表。

2.头文件: #include<vector>

3.常见用法:

vector<int> d(n); 定义一个存放int类型的容量为n的容器

vector<int> d(n,0); 定义一个存放int类型的容量为n的容器,并初始化每个元素为0

vector<int> d(b); 定义一个数组d,把b内所有元素拷贝至d中

vector<vector<<int>> d(n,vector<int>(m)) 定义二维数组

d.push_back(x); x存入数组末尾(自动扩充内存)

d.insert(d.begin()+y,x); 在y处插入x

d.assign(d.begin()+c,b.begin(),b.begin()+x) ;将b的前x个元素插入d的c位置

d.erase(i); 删除第i个元素

d.erase(d.begin(),d.begin()+x);  删除前x个元素

d.size();   返回d内元素数目

d.front();  返回d的最后一个元素

d.back(); 返回d的第一个元素

d.empty(); 返回d是否为空

d.resize(c,0); 将d中元素数目控制在c个,多删,少补用0补可以缺省,用随机数补

d.pop_back(); 删除d的最后一个元素

d.clear();  将d清空

读取方式:for(int i=0;i<a.size();i++)cout<<a[i]<<" ";//下标方式获取

                  for(vector<int>::iterator it=a.beign();it!=a.end();it++) cout<<*it<<" ";//迭代器获取

4.常用算法:

#include<algorithm>

sort(a.beigin(),a.end());  将a内元素从小到大排序

sort(a.beign(),a.end(),cmd); 将a内元素按照cmd函数所限制的规则排序

reverse(a.beigin(),a.end()); 将a内元素倒置 1 7  3 9 -》9 3 71

find(a.begin(),a.end(),c); 寻找c元素在a内的位置

copy(a.beign(),a.end(),b.beigin()+x); 将a内所有元素复制到b内,存储位置从x开始

二. list-双向链表

1.定义:双向链表,元素存储不连续,本身提供两个指针,用来指向第一个元素和最末尾的元素。

2.头文件: #include<list>

3.常用方法:

list<int> l(n);    //定义一个可存放n个int类型元素的链表

list<int> l=l1;/list<int> l(l1);   //新建一个链表l作为l1的拷贝

list<int> l(n,elem); //定义链表并用n个elem元素初始化;

l.assign(n,elem); //复制n个elem元素给l

l.assign(l1); //将l1赋值给l

l.assign(s,e); //将区间[s,e)内的元素复制给l

l.front(); //访问链首元素

l.back(); //访问链尾元素

l.push_back(x); //将x插入链尾

l.push_front(x); //将x插入链首

l.pop_back(); //删除链尾元素

l.pop_front(); //删除链首元素

l.insert(i,elem); // i位置前插入elem元素

l.insert(i,n,elem); //i位置前插入n个elem元素

l.insert(i,s,e); //i位置前插入从[i,e)之间的元素

l.clear(); //清空l

l.earse(i); //删除第i个元素

l.earse(s,e); //删除[s,e)之间的元素

l.resize(num); //将l内元素个数变为num个

l.remove(val); //将值为val的元素移除

l.unique(); //删除相邻重复元素,只保留一个

l.sort(); //升序排列

l.sort(op); //按照规则排序

l.merge(l1,op); //将l1排好序的元素合并至l内,并排序

l.reverse(); //l反转

4.与vector的区别:

(1)内存连续性:vector顺序表,内存连续,元素被顺序存储;list双向链表,内存不一定连续,                                 元素被随机存储;

(2)内存扩展:vector在扩充内存时,新申请一块足够大的内容,然后将所有元素复制到新内                                  存,list不需要考虑内存连续性,新增开销小

(3)访问元素:list只能通过指针访问元素,随机访问元素开销大,而vector可以通过索引随机元                             素,开销小

(4)插入删除:vector插入或删除元素时,需要复制该位置右边所有元素,花销大,而list只需要                             指针的移动。

总之,高效随机存取,不考虑插入、删除效率,用vector;不考虑随机存取,大量插入删除,用list。

三. deque-双端队列

1.定义:首尾皆可插入和删除的队列,也可以看作双端数组

2.头文件:#include<deque>

3.常见用法:

deque<int> dp;  //定义存放int类型的双端队列

deque<int> dp(n,elem); //初始化dp内存入n个elem

deque<int> dp(b); //将b拷贝到dp内

dp.assign(a.begin(),a.end()); //将a拷贝到dp内

dp.push_back(x); //将x存入队尾

dp.front_back(x); //将x存入队头

dp.at(i); //返回索引为i的元素

dp.front();  //返回队首元素

dp.back(); //返回队尾元素

dp.size();  //返回队内元素个数

dp.empty(); //返回队列是否为空

dp.pop_back(); //删除队尾元素

dp.front_back(); //删除队首元素

dp.resize(n); //将队列长度变为n

dp.insert(i,elem); //在队列i位置前插入elem元素

dp.insert(i,n,elem); //在队列i位置前插入n个elem元素

dp.insert(i,s,e); //在队列i位置前插入从[i,e)之间的元素

dp.clear(); //清空dp

dp.earse(i); //删除第i个元素

dp.earse(s,e); //删除[s,e)之间的元素

四.queue-队列

1.定义:队列,一种先进先出,后进后出的数据结构

2.头文件:#include<queue>

3.常见用法:

queue<int> q; //定义队列

q.empty(); //返回队列是否为空

q.front();  //返回队列中的第一个元素

q.back();  //返回队列中的最后一个元素

q.push(x);  //将x放入队尾

q.pop();  //删除队列中的第一个元素

q.size();  //返回队列内元素的数目 

4.用途:广度优先遍历

五. priority_queue-优先队

1.定义:使用堆实现的默认最优元素至于队首的队列,与队列不同点在于赋予元素优先级,优先级高的排在队列前面,先出队。

2.头文件:#include<queue>

3.常见用法:

priority_queue<Type,Container,Functional> 定义,其中Type为数据类型,Container为容器可以为vector,deque,但是不能是list,Functional是比较方式

priority_queue<int,vector<int>,geater<int>> q; //定义升序队列

priority_queue<int,vector<int>,less<int>> q; //定义降序队列

priority_queue<pair<int,int>> q; //定义pair类型的队列

q.top(); //返回队头元素

q.pop(); //弹出队头元素

q.empty(); //返回队列是否为空

q.size(); //返回元素个数

q.push(x); //将x元素入队并排序

六.stack-栈

1.定义:栈,一种先入后出,后入先出的数据结构

2.头文件:#include<stack>

3.常见用法:

stack<int> s; 定义栈

s.empty(); 返回栈是否为空

s.top(); 返回栈顶元素

s.pop(); 弹出栈顶元素

s.push(i); 将元素i入栈

s.size(); 返回栈内元素个数

4.用途:用来模拟实现一些递归,防止程序对栈内存的限制而导致程序错误。 

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

STL模板(一)向量、栈和队列 的相关文章

  • X11 模式对话框

    如何使用 Xlib 在 X11 中创建模式对话框 模态对话框是一个位于应用程序其他窗口之上的窗口 就像瞬态窗口一样 并且拒绝将焦点给予应用程序的其他窗口 在 Windows 中 当试图从模态窗口夺取焦点时 模态也会通过闪 烁模态窗口的标题栏
  • 是否有可能劫持标准输出

    我正在尝试使用 C 重定向 Windows XP 上已运行进程的标准输出 我知道如果我自己生成进程 我可以做到这一点 但对于这个应用程序 我更喜欢一个 监听器 我可以附加到另一个进程 这在纯 Net 中可能吗 如果不可能 在 Win32 中
  • 深拷贝和动态转换 unique_ptr

    假设我有一个如下所示的类 class A virtual A class B public A class C public A 我还有一个 unique ptr 向量 它是这样声明的 std vector
  • NDK 应用 onDestroy 清理 - 如何 DetachCurrentThread

    因此 如果我们连接 我们必须在完成后分离线程 对吗 JNIEnv get jni env JNIEnv res JAVA VM gt GetEnv void res JNI VERSION 1 6 Using cached JavaVM J
  • 使用 C# 将多个音频样本混合到单个文件中

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在寻找一个能够创建音频文件 mp3 或 wav 的库 NAudio http www codeple
  • 局部函数声明有什么用处吗?

    大多数像我这样的 C 程序员都曾犯过以下错误 class C int main C c declares a function c taking no arguments returning a C not as intended by m
  • 如何在C中同时运行两个子进程?

    所以我开始学习并发编程 但由于某种原因我什至无法掌握基础知识 我有一个名为 fork c 的文件 其中包含一个 main 方法 在此方法中 我将 main 分叉两次 分别进入子进程 1 和 2 在孩子 1 中 我打印了字符 A 50 次 在
  • opencv中如何去除二值图像噪声?

    将图像转换为二值图像 黑白 后如果有任何噪音怎么办 我消除了那些不需要的噪音 您可以看到下图的黑色区域内有一些白噪声 我该如何去除噪声 使用opencv http img857 imageshack us img857 999 blackn
  • .NET 5 EF Core SaveChangesAsync 因错误而挂起

    尽管这个问题有很多结果 但没有一个真正给我明确的答案 每次我尝试通过 AddAsync 和 SaveChangesAsync 方法插入错误数据 例如重复的主键 时 我都会看到以下日志 执行 DbCommand 失败 15 毫秒 我还在 SQ
  • 在c#中获取没有时间的日期

    我的表上有一列 缺勤日期时间 日期 当我想要获取包含日期的行时 它返回 0 行 这是我的 C 代码 DateTime ClassDate DateTime Parse lblDate Content ToString var Abs dbs
  • 配置:错误:无法运行C编译的程序

    我正在尝试使用 Debian Wheezy 操作系统在我的 Raspberry Pi 上安装不同的软件 当我运行尝试配置软件时 我尝试安装我得到此输出 checking for C compiler default output file
  • 当需要不同数量和类型的参数时如何创建操作委托列表

    我们有一组大约两打的类 它们继承自具有抽象 Validate 方法的基类 当然 每个类都有不同的验证需求 但它们之间的不同组合需要规则 因此 正如您可以想象的那样 这导致了大量代码重复 例如 A 类需要规则 1 3 6 和 9B 类需要规则
  • 如何在 C# 中更改公共 IP 地址

    我正在创建一个 C winform 应用程序 我想在其中更改公共 IP 地址 而不是像 Hotspot Shield ZenMate OpenVPN 等那样更改 IPv4 地址 我已经检查了以下链接 但没有找到足够的帮助 所以我发布了这个问
  • “1个未解决的外部”C++

    我已经检查了所有文件之间的连接以及类和函数定义 但每次我尝试运行我的程序时 它都会阻止我并告诉我它有 1 个未解析的外部 该程序应该打开多个文件 一个 学生 文件和一个 成绩 文件 从中读取数据 然后使用 查询文件 来查找数据 找到查询中要
  • Xcode 7 调试器不会中断内联标头函数

    过去五年我一直在各种 C 项目中使用 Xcode 没有出现这个问题 今天 我打开了一个较旧的项目 大约 2 年前 并尝试通过在该函数中放置一个活动断点来调试头文件中的内联函数 由于某种原因 调试器不会中断此代码 但是 如果我在调用该函数的
  • 使用多态对象数组进行 JSON 反序列化

    我在涉及多态对象数组的 JSON 反序列化方面遇到问题 我已经尝试过记录的序列化解决方案here https stackoverflow com questions 5186973 json serialization of array w
  • 从对列表创建邻接列表类型结构

    在 C 中 我有 class Pair int val1 int val2 我有一个来自以下来源的配对列表 List
  • 如何在 C 中创建最低有效位设置为 1 的掩码

    这个功能如何运作 最低有效 n 位设置为 1 的掩码 Example n 6 gt 0x2F n 17 gt 0x1FFFF 我根本不明白这些 尤其是 n 6 gt 0x2F 另外 什么是面膜 通常的方法是采取1 并将其左移n位 这会给你类
  • 使用 CodeDOM 将程序集添加到 BuildManager 会导致间歇性错误

    我正在使用 CodeDOM 在运行时创建内存中程序集 如下所示 public Assembly Compile CodeCompileUnit targetUnit string path Path GetDirectoryName new
  • 在windows + opengl中选择图形设备

    我知道如何使用 openGL 打开窗口 使用 Win32 或其他工具包 但是当系统有2块显卡时 如何选择要渲染的图形设备 我的编程语言是 C 我专注于 Windows 但任何示例都将受到欢迎 编辑 也许更好地解释我的问题是个好主意 以便添加

随机推荐

  • 【解决】windows安装pycrypto出错问题。error C2061: 语法错误: 标识符“intmax_t”

    1 执行命令报错 pip install pycrypto Installing collected packages pycrypto Running setup py install for pycrypto error ERROR C
  • easyUI Tree树动态刷新子节点

    tree tree url xxx 默认是post请求 checkbox false animate true lines true loadFilter function rows 返回要显示的过滤数据 返回数据时以标准树格式返回的 也就
  • MongodbTemplate 批量更新或者修改

    批量更新或者修改 public void saveOnlineStatusList List
  • 线性反馈移位寄存器 LFSR

    参考连接 添加链接描述 运算基础 模2运算 线性反馈移位寄存器用于产生可重复的伪随机序列PRBS 该电路由n级除法器和异或门组成 在k阶段 寄存器存在初值 Rn 1 R1 R0 称为seed 在k 1阶段 寄存器的值变为 k 1阶段 Rn
  • word2010或以上版本编号变成黑块的正确处理方

    打开编号显示为黑块的文档 把光标放置在黑块的后面 然后在键盘上按左方向键 则黑块变灰色 为选中状态 2 然后按下ctrl shift s 出现应用样式窗口点击 重新应用 黑块显示成正常的编号 3 然后点击 多级列表 按钮 选择 定义新的多级
  • 一次数据库的选型,FireBird胜出

    做了n多年的J2EE应用以后 如何做客户端的BI确实让我一下子摸不到门路 近期的一个客户要求我们给他做基于客户端的BI分析 客户是对外提供重要数据的单位 有很多的客户每年购买他的数据 可以说人家的数据库 每行每列都是钱 在这种情况下 他们非
  • css实现文字环绕图片布局

    前言 css实现文字环绕图片的效果 实现效果 实现代码 通过图片属性 align div style width 400px img src d303 paixin com thumbs 3548553 231637502 staff 10
  • 数据结构——AVL树

    目录 1 什么是AVL树 2 AVL树插入的模拟实现 节点定义 插入 旋转 右单旋 左单旋 双旋 右左旋 双旋 左右旋 完整的插入代码 3 AVL树的性能分析 1 什么是AVL树 AVL树是一种自平衡二叉查找树 也被称为高度平衡树 它具有以
  • 小福利,数据可视化之常见图形的绘制

    大家好 我是天空之城 今天带来小福利 数据可视化之常见图形的绘制 读取 本 专 科 群体的数据 college student data pd read csv 工作 college student data csv encoding ut
  • opencv提取图像中的颜色直方图(RGB、HSV)

    本篇博客主要介绍利用opencv工具提取一幅图像中的颜色直方图特征 所谓颜色直方图 指的是一幅图像中的颜色分布 与图像中的特定的物体无关 只是用来表示人的眼睛观察到的图像中的颜色分布情况 例如说 一幅图中红色占了多少比例 绿色占了多少比例等
  • 模型旋转 触摸屏 手指滑动360度旋转 安卓版本 EasyTouch

    using UnityEngine using System Collections using System Collections Generic using DG Tweening using UnityEngine EventSys
  • 4.2.3 积分法(二)——分部积分法

    emmmm想想词 算了想不出来 既然不定积分和导数是反操作 那就从导数开始说吧 先看一个导数公式 就不解释变形过程了 上图其实就是分部积分法的计算过程 总之是分成两个步骤 先分部再积分 至于 C等到完全积分积出来之后再加 目前我们总结过的不
  • 深入 Python 3

    深入 Python 3 http dipyzh bitbucket org table of contents html xml 目录 深入 Python 3 中有何新内容 又名 负号层 安装 Python 深入 哪个版本的 Python
  • ajax前后端交互示例

    文章目录 一 前后端交互方法 1 Ajax前端示例 1 1 特点 1 2 ajax同域请求示例 1 3 ajax跨域请求示例 2 后端示例 2 1 controller层处理 一 前后端交互方法 1 Ajax前端示例 1 1 特点 Ajax
  • leetcode92 反转链表II

    题目 给你单链表的头指针 head 和两个整数 left 和 right 其中 left lt right 请你反转从位置 left 到位置 right 的链表节点 返回 反转后的链表 示例 输入 head 1 2 3 4 5 left 2
  • css动画(四)

    推荐动画四 html代码上传 div class night div class shooting star div div class shooting star div div class shooting star div div c
  • Swagger整体整理一下蛤

    最近在学习springboot时候发现好多开源的项目里面都提到了swagger 原来是一个前后端分离开发过程中为了防止两只团队为了需求更改打架 毕竟前端需要加一个参数 后端就要改好多好多 多的不说 直接上货 1 导入依赖 首先是导入依赖 既
  • Unity的Application.Quit()方法使用失效的其他解决方案。

    1 android手机上 使用方法 Application Quit 之后 游戏的进程还在 解决方法编写java代码 打成jar包或aar放到Assets Plugins Android libs下 public void KillProc
  • 全球互联网未来发展九大趋势

    当今世界网络信息技术日新月异 互联网正在全面融入经济社会生产和生活各个领域 引领了社会生产新变革 创造了人类生活新空间 带来了国家治理新挑战 并深刻地改变着全球产业 经济 利益 安全等格局 互联网正在成为21世纪影响和加速人类历史发展进程的
  • STL模板(一)向量、栈和队列

    一 vector 向量 1 定义 向量类型可以容纳许多类型的数据 被称为容器 可以当数组使用 可以随时增加或减少元素 内存连续 顺序表 2 头文件 include