【C++】STL容器详解【下】

目录

一、list容器

1.1 list基本概念

1.2 lsit构造函数

1.3 list数据元素插入和删除操作

1.4 list大小操作

1.5 list赋值操作

1.6 list数据的存取

1.7 list反转排序

二、set/multiset容器

2.1 set/multiset基本概念

2.2 set构造函数

2.3 set赋值操作

2.4 set大小操作

2.5 set插入和删除操作

2.6 查找操作

三、队组pair

四、map/multimao容器

4.1 map基本概念

4.1 map构造函数

4.2 map赋值操作

4.3 map大小操作

4.4 插入数据元素操作

4.5 map删除元素

4.5 map查找操作


一、list容器

1.1 list基本概念

链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针连接次序实现的。链表由一系列节点(链表中每一个元素称为节点)组成,节点可以在运行时动态生成。每个节点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个节点地址的指针域。相较于vector的连续线性空间,list就显得负责许多,它的好处就是每次插入或者删除一个元素,就配置或者释放一个元素空间。因此,list相对于空间运用由绝对的精确,一点都不浪费。而且,对于任何位置的元素插入或者移除,list永远都是常数时间。List和Vector是两个最常用的容器。List容器是一个双向链表。

1.2 lsit构造函数

list<T> lstT; //list 次啊用模板类实现,对象的默认构造形式
list(begin, end); //构造函数将[begin, end)区间的元素拷贝给本身
list(n, elem); //构造函数将m个elem拷贝给本身
list(const list &lst); //拷贝构造函数

1.3 list数据元素插入和删除操作

push_back(elem); //在容器尾部追加一个元素
pop_back(); //删除容器中最后一个元素
push_front(elem); //在容器头部插入一个元素
pop_front(); //在容器头部删除第一个元素
insert(pos,elem); //在pos位置插入elem元素的拷贝,返回新数据的位置
insert(pos, n, elem); //在pos位置插入n个elem元素,无返回值
insert(pos, begin, end); //在pos位置插入[begin, end)区间的数据,无返回值
clear(); //移除容器中的所有数据
erase(begin, end); //删除[begin, end)区间的元素
erase(pos); //删除pos位置的元素
remove(elem); //删除容器中所有于elem匹配的元素

1.4 list大小操作

size(); //返回容器中元素的个数
empty(); //判断容器是否为空
resize(num); //重新指定容器长度为num,若容器边长,则以默认值填充新位置,若变短,直接截断
resize(num, elem); //重新指定容器长度为num,若容器边长,则以elem填充新位置,若变短,直接截断

1.5 list赋值操作

assign(begin, end); //将[begin,end)区间中的数据拷贝给本身
assign(n, elem); //将n个elem拷贝给本身
list& operator=(const list &lst); //重载等号操作符
swap(lst); //将lst与本身交换

1.6 list数据的存取

front(); // 返回第一个元素
back(); //返回最后一个元素

1.7 list反转排序

reverse(); //反转链表
sort(); //list排序

二、set/multiset容器

2.1 set/multiset基本概念

set特性是,所有元素都会根据元素的键值自动排序,set的元素既是键值又是实值。set不允许有两个相同的键值。

multiset特性及用法和set完全一致,唯一差别在于它允许键值重复。

2.2 set构造函数

set<T> st; //set默认构造函数
multiset<T> mst; //multiset默认构造函数
set(const set &st); //拷贝构造函数

2.3 set赋值操作

set& operator=(const set &st); //重载等号操作符
swap(st); //交换两个集合容器

2.4 set大小操作

size(); //返回容量中元素的数目
empty(); //判断容器是否为空

2.5 set插入和删除操作

insert(elem); //在容器中插入元素
clear(); //清除所有的元素
erase(pos); //删除pos迭代器所指的元素,返回下一个元素的迭代器
erase(begin, end); //删除[begin, end)区间的所有元素,返回下一个元素的迭代器
erase(elem); //删除容器中值为elem的元素

2.6 查找操作

find(key); //查找键key是否存在,若存在,返回键的元素的迭代器,若不存在,但会set.end()
count(key); //查找键key的的元素个数
lower_bound(keyElem); //返回第一个key>=keyElem元素的迭代器
upper_bound(keyElem); //返回第一个key>keyElem元素的迭代器
equal_range(keyElem); //返回容器中key与keyElem相等的上下限的两个迭代器

三、队组pair

队组pair将一堆值组合成一个值,这一对值可以具有不同的数据类型,两个值可以分别用piar的两个公共属性first和second模板:template<class T1, class T2>stryct pair。

如何创建pair队组?

//第一种方法创建一个对组
pair<string, int> pair1(string("name"), 20);
cout<<pair1.first<<endl;
cout<<pair1.second<<endl;
//第二种
pair<string, int> pair2 = make_pair("name", 10);
cout<<pair2.first<<endl;
cout<<pair2.second<<endl;
//pair=赋值
pair<string, int> pair3 = pair2;
cout<<pair3.first<<endl;
cout<<pair3.second<<endl;

四、map/multimao容器

4.1 map基本概念

map的特性是,所有的元素都会根据元素的键值自动排序,Map所有的元素都是pair,同事拥有实键和键值,pair的第一个元素被视为键值,第二元素被视为实值,map不允许两个元素有相同的键值。

我们可以通过map的迭代器改变map的键值吗?

答案是不行的,因为map的键值关系到map的排序规则,任意改变map键值将会严重破坏map的组织。如果想要修改元素的实值,那么是可以的。Map和list拥有相同的某些性质,当它的容器元素进行新增操作或者删除操作时,操作之前的所有迭代器,在操作之后依然有效,当然被删除的那个元素的迭代器必然是个例外。

Multimap和map操作类似,唯一的区别multimap键值可以重复。

4.1 map构造函数

map<T1, T2> mapTT; //map默认构造函数
map(const map &mp); //拷贝构造函数

4.2 map赋值操作

map& operator=(const map &mp); //重载等号操作符
swap(mp); //交换两个集合容器

4.3 map大小操作

size(); //返回容器元素的数目
empty(); //判断容器是否为空

4.4 插入数据元素操作

map.insert(...); //往容器种插入元素,返回pair<iterator, bool>
map<int, string> mapStu;
//第一种 通过pair的方式插入对象
mapStu.insert(pair<int, string)(3, "校长");
//第二种 通过pair的方式插入对象
mapStu.insert(make_pair(-1,"小河"));
//第三种 通过value_type方式插入对象
mapStu.insert(map<int, string>::value_type(1,"夏鸥"));
//第四种 通过数组的方式
mapStu[3] = "阿迪斯"

4.5 map删除元素

clear(); //清除所有的元素
erase(pos); //删除pos迭代器所指的元素,返回下一个元素的迭代器
erase(begin, end); //删除[begin, end)区间的所有元素,返回下一个元素的迭代器
erase(elem); //删除容器中key为elem的元素

4.5 map查找操作

find(key); //查找键key是否存在,若存在,返回键的元素的迭代器,若不存在,但会map.end()
count(key); //查找键key的的元素个数
lower_bound(keyElem); //返回第一个key>=keyElem元素的迭代器
upper_bound(keyElem); //返回第一个key>keyElem元素的迭代器
equal_range(keyElem); //返回容器中key与keyElem相等的上下限的两个迭代器

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据库的操作:SQL语言的介绍

一.前言 SQL是一种结构化查询语言。关系型数据库中进行操作的标准语言。 二.特点 ①对大小写不敏感 例如&#xff1a;select与Select是一样的 ②结尾要使用分号 没有分号认为还没结束; 三.分类 ①DDL&#xff1a;数据定义语言&#xff08;数据库对象的操作&#xff08;结…

| Origin绘图 |瀑布图的绘制(保姆级教程)

&#x1f411; | Origin绘图 |瀑布图的绘制&#x1f411; 文章目录 &#x1f411; | Origin绘图 |瀑布图的绘制&#x1f411;前言瀑布图简介瀑布图绘制数据导入坐标轴刻度调节调整画布大小添加颜色及设置线条为曲线坐标轴标签调节网格调节 总结 前言 感觉好久没出过关于Origin…

MyBatis-MappedStatement什么时候生成?QueryWrapper如何做到动态生成了SQL?

通过XML配置的MappedStatement 这部分MappedStatement主要是由MybatisXMLMapperBuilder进行解析&#xff0c;核心逻辑如下&#xff1a; 通过注解配置的MappedStatement 核心逻辑就在这个里面了&#xff1a; 继承BaseMapper的MappedStatement 我们看看这个类&#xff0c;里…

FreeRTOS学习笔记—③RTOS内存管理篇(待更新完善)

二、RTOS的核心功能 RTOS的核心功能块主要分为任务管理、内核管理、时间管理以及通信管理4部分&#xff0c;框架图如下所示&#xff1a; &#xff08;1&#xff09;任务管理&#xff1a;负责管理和调度任务的执行&#xff0c;确保系统中的任务能够按照预期运行。 &#xff08;…

了解开源消息代理RabbitMQ

1.RabbitMQ 是什么&#xff1f; RabbitMQ是一个消息代理:它接受并转发消息。你可以把它想象成邮局:当你把要寄的邮件放进邮箱时&#xff0c;你可以确定邮递员最终会把邮件送到收件人那里。在这个比喻中&#xff0c;RabbitMQ是一个邮筒、一个邮局和一个邮递员。RabbitMQ和邮局之…

【kubernetes】配置管理中心Configmap运用

一&#xff0c;介绍 Configmap&#xff08;简写 cm&#xff09;是k8s中的资源对象&#xff0c;用于保存非机密性的配置的&#xff0c;数据可以用key/value键值对的形式保存&#xff0c;也可通过文件的形式保存。 【局限性】&#xff1a;在ConfigMap不是用来保存大量数据的&am…

(计算机网络)运输层

一.运输层的作用 运输层&#xff1a;负责将数据统一的交给网络层 实质&#xff1a;进程在通信 TCP&#xff08;有反馈&#xff09;UDP&#xff08;无反馈&#xff09; 二.复用和分用 三. TCP和UDP的特点和区别 进程号--不是固定的 端口号固定--mysql--3306 端口--通信的终点 …

【深度学习】softmax 回归的从零开始实现与简洁实现

前言 小时候听过一个小孩练琴的故事&#xff0c;老师让他先弹最简单的第一小节&#xff0c;小孩练了两天后弹不出。接着&#xff0c;老师让他直接去练更难的第二小节&#xff0c;小孩练习了几天后还是弹不出&#xff0c;开始感觉到挫败和烦躁了。 小孩以为老师之后会让他从简…

科技信贷业务怎么寻找客户?

在科技信贷业务领域&#xff0c;寻找客户的痛点主要集中在以下几个方面&#xff1a; 1.风险评估难题&#xff1a;科技型企业尤其是初创企业&#xff0c;往往缺乏足够的历史数据和抵押物&#xff0c;这使得金融机构在评估其信用风险时面临较大挑战。由于科技企业的研发周期长、…

C语言小游戏--贪吃蛇实现

C语言小游戏--贪吃蛇实现 1.游戏实现背景2.Win32 API介绍2.1什么是Win32 API2.2控制台程序(Console)2.3控制台屏幕的坐标COORD2.4GetStdHandle2.4.1函数语法2.4.2函数的使用 2.5GetConsoleCursorInfo2.5.1函数语法2.5.2函数的使用 2.6CONSOLE_CURSOR_INFO2.6.1结构体结构2.6.2结…

【数据库】MySQL聚合统计

目录 1.聚合函数 案例1&#xff1a; 统计班级共有多少同学 案例2&#xff1a;统计本次考试的数学成绩分数个数 案例3&#xff1a;统计数学成绩总分 案例4&#xff1a;统计平均总分 案例5&#xff1a;返回英语最高分 案例6&#xff1a;返回 > 70 分以上的数学最低分 2.分…

通信工程学习:什么是SSB单边带调制、VSB残留边带调制、DSB抑制载波双边带调制

SSB单边带调制、VSB残留边带调制、DSB抑制载波双边带调制 SSB单边带调制、VSB残留边带调制、DSB抑制载波双边带调制是三种不同的调制方式&#xff0c;它们在通信系统中各有其独特的应用和特点。以下是对这三种调制方式的详细解释&#xff1a; 一、SSB单边带调制 1、SSB单边带…

Android Framework(四)WMS-窗口显示流程——窗口创建与添加

文章目录 流程概览涉及模块流程概览 应用端——window创建&#xff1a;Activity::attach创建window流程setWindowManager&#xff0c;getWindowManagerDecorView 应用端——window的显示流程&#xff1a;Activity::onResumeViewRootImpl::setViewmWindowSession 是什么mWindow是…

ThinkPHP5 5-rce远程代码执行漏洞复现

启动容器 docker-compose up -d 查看端口 docker ps 端口为:8080,访问网站&#xff0c;搭建成功 漏洞复现 &#xff08;1&#xff09;输出关于 PHP 配置的信息 &#xff08;2&#xff09;将php代码写入文件 接着访问shell.php 由于存在过滤&#xff0c;需要用到base64加密来使…

SprinBoot+Vue图书馆预约与占座微信小程序的设计与实现

目录 1 项目介绍2 项目截图3 核心代码3.1 Controller3.2 Service3.3 Dao3.4 application.yml3.5 SpringbootApplication3.5 Vue3.6 uniapp代码 4 数据库表设计5 文档参考6 计算机毕设选题推荐7 源码获取 1 项目介绍 博主个人介绍&#xff1a;CSDN认证博客专家&#xff0c;CSDN平…

用了虚拟机后,本机摄像头打不开了(联想电脑thinkpad)

虚拟机有摄像头&#xff0c;我断开了连接&#xff0c;现在本机的摄像头打开就是一个锁 我先把虚拟机的摄像头关了 然后把本机的vm usb关闭了 WinR&#xff09;&#xff0c;输入services.msc&#xff0c;找到VMware USB Arbitration Service&#xff0c;确保其状态为“关闭 然后…

【Day09-IO-字符流其它流】

IO流 IO流-字符流 字节流&#xff1a;适合复制文件等&#xff0c;不适合读写文本文件 字符流&#xff1a;适合读写文本文件内容 FileReader&#xff08;文件字符输入流&#xff09; 作用&#xff1a;以内存为基准&#xff0c;可以把文件中的数据以字符的形式读入到内存中来。 …

【Qt】窗口移动和大小改变事件

窗口移动和大小改变事件 moveEvent窗口移动时触发的事件resizeEvent窗口大小改变时触发的事件 例子&#xff1a;测试移动窗口和改变窗口事件 代码展示 #include "widget.h" #include "ui_widget.h"#include <QDebug> #include <QMoveEvent> …

Springboot中基于X509完成SSL检验的原理与实践

前言 各位对HTTPS不陌生吧&#xff1f;几乎涉及安全的领域&#xff0c;均要求通过HTTPS协议进行数据传输。而在传输过程中&#xff0c;又涉及到了SSL证书的使用。既然提到了SSL证书&#xff0c;那咱们先了解了解什么是SSL证书&#xff1a; SSL证书通过在客户端浏览器和Web服务…

如何恢复回收站中已删除/清空的文件

回收站清空后如何恢复已删除的文件&#xff1f;是否可以恢复永久删除的文件&#xff1f;或者最糟糕的是&#xff0c;如果文件直接被删除怎么办&#xff1f;本文将向您展示清空回收站后恢复已删除数据的最佳方法。 回收站清空后如何恢复已删除的文件&#xff1f; “回收站清空后…