当前位置: 首页 > news >正文

C++标准模板库(STL)|容器|vector| queue|

对STL进行总结,STLstandard template library的简写,是C++中的一个标准模板库,用于实现常用的数据结构和算法,它是C++程序员经常使用的一个工具箱。STL 的主要目的是提高开发效率和代码质量,使得程序员可以更加便捷地完成常见的操作。里面包括:算法(algorithm)、容器(container)、仿函数(functors)、迭代器(iterator)等,这篇文章先说容器

容器

 容器之所以叫容器,可以抽象理解为我们装东西的容器,比如装水的盒子,只不过C++里的容器是用于装数据,STL这个库里面,它提供了很多种容器类型用于存储数据。主要包括vector(动态数组)set(集合)map(映射)stack(栈)queue(队列)priority—queue(优先队列)string(字符串、pair(二元组) 

  • vector:可以动态调整大小的数组,支持快速的随机访问和迭代器访问,并且支持在尾部添加或删除元素。
  • set:有序集合,其中每个元素都是唯一的,支持快速的查找和插入操作。
  • unordered_set:无序集合,其中每个元素都是唯一的,支持快速的查找和插入操作,但元素的顺序是未定义的。
  • map:有序映射,其中每个元素都有一个唯一的键值对,支持快速的查找和插入操作。
  • unordered_map:无序映射,其中每个元素都有一个唯一的键值对,支持快速的查找和插入操作,但元素的顺序是未定义的。
  • deque:双端队列,支持快速的随机访问和迭代器访问,并且支持在头部和尾部添加或删除元素。
  • list:双向链表,只支持迭代器访问,并且支持在任意位置添加或删除元素。

 vector

 它的和数组差不多,区别就是他的长度是动态可变的,存储在堆中,一般可以替换普通数组

#include<vector>   

vector<类型> 数组名(长度,[初值])   //构造

vector<int> arr;         //构造int数组

vector<int> arr(100);        //构造初始长度100的数组

vector<int> arr(100,1);        //构造初始长度100的数组,初值为1

vector<vector<int>  mat(100,vector<int>());        //构造初始100行,不指定列数的二维数组

vector<vector<int>>  mat(100,vector<int>(666,-1));        //构造初始100行,初始列600的二维数组,初始值-1

vector<vector<vetcor<int>>>  mat1(100, vector<vector<int>>(6,vector<int>(4)));        //构造初始100行,初始列6的三维维数组,

 尾接&尾删

  • push_back(元素):在vector尾接一个元素,数组长+1
  • pop_back():删除vector尾部的一个元素,数组长度-1

 改变长度

 数组名.resize()

 arr.resize(100);        //将vector的长度改为100

set 

set 里的元素只出现一次,且元素没有顺序 ,因此适用于对元素去重,维护顺序等

#include<set>

set<类型,比较器> 集合名        //构造

set<int> st;        //存储int集合(从小到大)

set <int,greater<int>> st1;        //存储int集合(从大到小) 

 遍历

使用迭代器进行遍历

#include<bits/stdc++.h>
using namespace std;int main()
{set<int> st;    //构造一个集合st.insert(1);    //插入1st.insert(2);    //插入2st.erase(1);    //删除1st.find(2);    //找到1就返回1//遍历for (set<int>::iterator it = st.begin(); it !=st.end(); ++it){cout << *it <<endl;}return 0;
}

map 

 有序键值对结构,底层原理是黑红树。一个键只可以在映射中出现一次,且没有顺序

健类型:要存储健的数据类型

值类型:要存储的数据类型

比较器:键要比较大小使用的比较器,默认为less<数据类型>,可自定

#include<map>

map<健类型,值类型,比较器> 名字        //构造map

map<int,int> mp;        // int—>int的映射(从小到大)

map<int,int,greater<int>> mp1;        // int—>int的映射(从大到小)

mp[1] =  2;        //增加

mp.erase(1);        //  删除1这个键

mp[1] = 3;        // 改

cout << mp[1] << endl;        //查

mp.count(元素);        //检查元素是否存在

for(map<int,int>::iterator it =mp.begin(); it != mp.end(); ++it)
{ cout << it -> first << ' ' << i-> second << endl;
}//上述用迭代器的方法太长 不好读 一般使用下面基于范围循环的方法for(auto &m:mp)     //&是引用  m 是自定义的 mp是要便利的map的名字
{cout<<m.first << '' << m.second << endl;
}

stack

通过二次封装双端队列(queue),实现先进后出的栈数据结构 

 #include<stack>

stack<数据类型>  名字

 

stack<int> stk;        //构造一个栈

stk.push(1);        //进栈

stk.pop();        //出栈

stk.top();        //取顶栈

queue 

 先进先出

#include<queue>

queue<数据类型> 队名         //构造队列

queue<int> que;        //构造一个叫que的队列

que.push(元素);        //进队

que.pop();        //出队

que.front() ;        //取队首

que.back();        //取队尾

deque  

首尾都可插入和删除的队列为双端队列

双端队列排序一般不用 

priority_queue 

优先队列是在正常队列的基础上加了优先级,保证每次的队首元素都是优先级最大的。

可以实现每次从优先队列中取出的元素都是队列中优先级最大的一个

#include<queue>

priority_queue<数据类型> 名字         //构造一个优先队列

priority_queue<int> q1; // 默认大根堆, 即每次取出的元素是队列中的最大值
priority_queue<int, vector<int>, less<int> > q2; // 大根堆, 每次取出的元素是队列中的最大值,同第一行

priority_queue<int, vector<int>, greater<int> > q3; // 小根堆, 每次取出的元素是队列中的最小值
 

string

存储字符串

string (长度,初值)        //构造函数

string s1;        //构造字符串,为空

string s2 ="abcde";        //构造字符串 并赋值abcd

string s3(10,'6');        //通过构造函数构造为66666666666

cin >> s1;         //输入字符串

cout << s1;        //输出字符串

 s1+="fgj";        //尾接字符串

pair

存储二元组,两个元素的一个组合

#include<utiity>

pair<类型,类型> pr        //构造一个二元组

pari<int, int> p1;         //存储int型的元组

pair<int, long long> p2;         

pair<int, char> pr3={1,'a'};        //赋值 第一个元素是1,第2个元素是a

int  a = pr.first;        //取第一个值

int b = pr.second;        //取第二个值

 

相关文章:

C++标准模板库(STL)|容器|vector| queue|

对STL进行总结&#xff0c;STL是standard template library的简写&#xff0c;是C中的一个标准模板库&#xff0c;用于实现常用的数据结构和算法&#xff0c;它是C程序员经常使用的一个工具箱。STL 的主要目的是提高开发效率和代码质量&#xff0c;使得程序员可以更加便捷地完成…...

【Android】安卓四大组件之Service用法

文章目录 使用Handler更新UIService基本特点启动方式非绑定式服务使用步骤 绑定式服务步骤 生命周期非绑定式启动阶段结束阶段 绑定式启动阶段结束阶段 前台Service使用步骤结束结束Service本身降级为普通Service降级为普通Service 使用Handler更新UI 主线程创建Handler对象&a…...

Python爬虫入门实战(详细步骤)

1. 技术选型 爬虫这个功能&#xff0c;我个人理解是什么语言都能写的&#xff0c;只要能正常发送 HTTP 请求&#xff0c;将响应回来的静态页面模版 HTML 上把我们所需要的数据提取出来就可以了&#xff0c;原理很简单&#xff0c;这个东西当然可以手动去统计收集&#xff0c;但…...

5、Linux : 网络相关

OSI七层网络模型 TCP/IP四层 概念模型 对应网络协议 应用层&#xff08;Application&#xff09; HTTP、TFTP, FTP, NFS, WAIS、 表示层&#xff08;Presentation&#xff09; 应用层 Telnet, Rlogin, SNMP, Gopher 会话层&#xff08;Session&#xff09; SMTP…...

Linux中针对文件权限的解析

1.文件权限详细解析&#xff1a; -rw-r--r--. 1 root root 114 4月 10 16:32 100.txt 1)-rw-r--r--. 总共11位 第一个“-”和最后一个“.”不用去管&#xff0c;剩下 rw- r-- r-- 属主 属组 其他人 u g o 第一个是“-”表示普通文件 第一个是“d”表示文件目录 …...

【0304】psql 执行“VACUUM FULL”命令的背后实现过程

1. 概述 在前面讲解Postgres内核中解析器相关(【0297】Postgres内核之 INSERT INTO 原始解析树 转 Query 树 (1))内容时,曾提到过,Postgres内核大致将用户下发的SQL语句分为三大类,这里的VACUUM FULL属于CMD_UTILITY; 因此直接调用utility.c(实用程序)中的对应函数。…...

Java常见面试题-11-MongoDb

文章目录 MongoDB 是什么&#xff1f;MongoDB 和关系型数据库 mysql 区别MongoDB 有 3 个数据库分别是什么&#xff1f;MongoDB 中的数据类型MongoDB 适用业务场景 MongoDB 是什么&#xff1f; mongodb 是属于文档型的非关系型数据库&#xff0c;是开源、高性能、高可用、可扩…...

PBLOCK

PBLOCK是附加到Vivado中分配给Pblocks的单元格的只读属性 设计套房。 Pblock是一组单元格&#xff0c;以及一个或多个指定 Pblock所包含的设备资源。在平面规划过程中使用了Pblocks 将其放置到组相关逻辑中&#xff0c;并将其分配到目标设备的某个区域。请参阅 Vivado设计套件用…...

电子纸打造智能、自动化、绿色的工作流程

电子纸打造智能、自动化、绿色的工作流程 RFID技术最早在1940年代问世&#xff0c;1980年开始商业化使用。直到现在RFID&#xff08;无线射频识别&#xff09;技术已经深入到我们生活的方方面面。特别是在工业生产、物流运输等领域&#xff0c;RFID技术发挥着越来越重要的作用…...

Redis 的6种回收策略(淘汰策略)详解

Redis 的6种回收策略&#xff08;淘汰策略&#xff09;详解 1、Redis的六种淘汰策略1. volatile-lru2. volatile-ttl3. volatile-random4. allkeys-lru5. allkeys-random6. no-eviction 2、使用策略规则 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷路&am…...

SQL注入sqli-labs-master关卡一

本文环境搭建使用的是小皮&#xff0c;靶机压缩包&#xff1a;通过百度网盘分享的文件&#xff1a;sqli-labs-php7-master.zip 链接&#xff1a;https://pan.baidu.com/s/1xBfsi2lyrA1QgUWycRsHeQ?pwdqwer 提取码&#xff1a;qwer 下载解压至phpstudy的WWW目录下即可。 第一…...

LeetCode面试题Day6|LeetCode238 除自身以外数组的乘积、LeetCode134 加油站

题目1&#xff1a; 指路&#xff1a; . - 力扣&#xff08;LeetCode&#xff09;238 除自身以外数组的乘积 思路与分析&#xff1a; 除去自身元素求其他元素的乘积&#xff0c;或许第一反应会是数组元素积乘再除以遍历到的元素&#xff0c;定义一个结果数组再对应放结果值&…...

猫头虎分享:Python库 FastAPI 的简介、安装、用法详解入门教程

&#x1f42f; 猫头虎分享&#xff1a;Python库 FastAPI 的简介、安装、用法详解入门教程 &#x1f680; &#x1f4c4; 摘要 作为一名专注于Python和人工智能开发的技术博主&#xff0c;猫头虎经常在开发过程中遇到各种挑战。最近&#xff0c;有粉丝问到如何高效地构建API&a…...

python连接MySQL数据库使用pymysql

开头 经过这么一段时间的学生信息管理系统的摸爬滚打&#xff0c;不断的学习更新的知识&#xff0c;不断修改自己的认知&#xff0c;针对pymysql以及MySQL数据库的知识做个总结&#xff0c;以纪念我这段时间的学习。 目录 开头 pymysql的使用流程 1.导入pymysql的工具包 方…...

AI时代下的编程趋势:程序员如何提升核心竞争力

随着人工智能和机器学习技术的飞速发展&#xff0c;大型语言模型和AI生成代码&#xff08;AIGC&#xff09;工具如ChatGPT、Midjourney、Claude等层出不穷&#xff0c;AI辅助编程逐渐成为现实。在这一变革的浪潮中&#xff0c;程序员群体面临着前所未有的挑战和机遇。一些人担忧…...

C#:基本语法

写在前面 本人在实习过程需要用C#进行开发&#xff0c;但本人之前的技术栈是C方向&#xff0c;所以在菜鸟教程上速通了一下C#的基本语法&#xff0c;总的来说和C还是非常相似的。 1 关键字 using关键字&#xff1a;使用命名空间class&#xff1a;使用类 2 注释 /* 这个程序…...

Redisson 实现分布式锁

文章目录 Redisson 是什么Redisson 使用客户端模式单节点模式哨兵模式主从模式集群模式Spring Boot 整合 Redisson 中的锁Redisson 可重入锁Redisson 公平锁Redisson 联锁Redisson 读写锁Redisson Redlock Redisson 的看门狗机制RedLock 解决单体故障问题如何使用 RedLockMarti…...

VMware ESXi学习笔记

esxi网络模型&#xff1a; 物理网卡: 一般会有多个物理网卡&#xff0c;用于管理口和其他(vsan) 虚拟交换机&#xff1a;创建虚拟交换机时&#xff0c;会要求选择至少1个上行链路(物理网卡) 端口组&#xff1a;一般一个虚拟交换机会创建两个端口组&#xff0c;一个虚机使用&a…...

Python 函数(2)

2、函数 2.1、函数传递列表 将列表传递给函数后&#xff0c;函数就能直接访问其内容。 下列为一个实例&#xff1a;将一个名字列表传递给一个名为greet_users()的函数&#xff0c;这个函数将会向列表中的每一个元素执行相应的信息。 def greet_users(name):for name in name…...

c++文件的读写

平常我们在编完代码后&#xff0c;基本都是从键盘输入&#xff0c;从屏幕输出&#xff08;显示&#xff09;&#xff0c;但可不可以从其他地方输入输出呢&#xff1f; ………………………………………………………………………………………………………………… 其实可以&…...

AI-调查研究-01-正念冥想有用吗?对健康的影响及科学指南

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; &#x1f680; AI篇持续更新中&#xff01;&#xff08;长期更新&#xff09; 目前2025年06月05日更新到&#xff1a; AI炼丹日志-28 - Aud…...

Linux链表操作全解析

Linux C语言链表深度解析与实战技巧 一、链表基础概念与内核链表优势1.1 为什么使用链表&#xff1f;1.2 Linux 内核链表与用户态链表的区别 二、内核链表结构与宏解析常用宏/函数 三、内核链表的优点四、用户态链表示例五、双向循环链表在内核中的实现优势5.1 插入效率5.2 安全…...

rknn优化教程(二)

文章目录 1. 前述2. 三方库的封装2.1 xrepo中的库2.2 xrepo之外的库2.2.1 opencv2.2.2 rknnrt2.2.3 spdlog 3. rknn_engine库 1. 前述 OK&#xff0c;开始写第二篇的内容了。这篇博客主要能写一下&#xff1a; 如何给一些三方库按照xmake方式进行封装&#xff0c;供调用如何按…...

React第五十七节 Router中RouterProvider使用详解及注意事项

前言 在 React Router v6.4 中&#xff0c;RouterProvider 是一个核心组件&#xff0c;用于提供基于数据路由&#xff08;data routers&#xff09;的新型路由方案。 它替代了传统的 <BrowserRouter>&#xff0c;支持更强大的数据加载和操作功能&#xff08;如 loader 和…...

Go 语言接口详解

Go 语言接口详解 核心概念 接口定义 在 Go 语言中&#xff0c;接口是一种抽象类型&#xff0c;它定义了一组方法的集合&#xff1a; // 定义接口 type Shape interface {Area() float64Perimeter() float64 } 接口实现 Go 接口的实现是隐式的&#xff1a; // 矩形结构体…...

(二)原型模式

原型的功能是将一个已经存在的对象作为源目标,其余对象都是通过这个源目标创建。发挥复制的作用就是原型模式的核心思想。 一、源型模式的定义 原型模式是指第二次创建对象可以通过复制已经存在的原型对象来实现,忽略对象创建过程中的其它细节。 📌 核心特点: 避免重复初…...

鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院查看报告小程序

一、开发环境准备 ​​工具安装​​&#xff1a; 下载安装DevEco Studio 4.0&#xff08;支持HarmonyOS 5&#xff09;配置HarmonyOS SDK 5.0确保Node.js版本≥14 ​​项目初始化​​&#xff1a; ohpm init harmony/hospital-report-app 二、核心功能模块实现 1. 报告列表…...

SpringBoot+uniapp 的 Champion 俱乐部微信小程序设计与实现,论文初版实现

摘要 本论文旨在设计并实现基于 SpringBoot 和 uniapp 的 Champion 俱乐部微信小程序&#xff0c;以满足俱乐部线上活动推广、会员管理、社交互动等需求。通过 SpringBoot 搭建后端服务&#xff0c;提供稳定高效的数据处理与业务逻辑支持&#xff1b;利用 uniapp 实现跨平台前…...

IT供电系统绝缘监测及故障定位解决方案

随着新能源的快速发展&#xff0c;光伏电站、储能系统及充电设备已广泛应用于现代能源网络。在光伏领域&#xff0c;IT供电系统凭借其持续供电性好、安全性高等优势成为光伏首选&#xff0c;但在长期运行中&#xff0c;例如老化、潮湿、隐裂、机械损伤等问题会影响光伏板绝缘层…...

推荐 github 项目:GeminiImageApp(图片生成方向,可以做一定的素材)

推荐 github 项目:GeminiImageApp(图片生成方向&#xff0c;可以做一定的素材) 这个项目能干嘛? 使用 gemini 2.0 的 api 和 google 其他的 api 来做衍生处理 简化和优化了文生图和图生图的行为(我的最主要) 并且有一些目标检测和切割(我用不到) 视频和 imagefx 因为没 a…...