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

news2024/9/17 0:46:37

目录

一、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.coloradmin.cn/o/2116973.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ChatGPT+Simple Mind Map生成思维导图:快速提升学习效率

一、告别杂乱笔记&#xff0c;一键生成清晰思维导图&#xff01; 最近开始学习网络安全&#xff0c;一头扎进了各种协议、漏洞、防御机制的海洋中。信息量巨大&#xff0c;知识点零散&#xff0c;让我很快便陷入了“知识焦虑”——笔记越记越多&#xff0c;却越来越混乱&#…

Django+Vue3前后端分离学习(二)(重写User类)

一、重写User类&#xff1a; 1、首先导入User类&#xff1a; from django.contrib.auth.models import User 2、然后点在User上&#xff0c;按住ctrl 点进去&#xff0c;发现 User类继承AbstractUser Ctrl点进去AbstractUser&#xff0c;然后将此方法全部复制到自己APP的mo…

基于微信小程序+Java+SSM+Vue+MySQL的宿舍管理系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、SSM项目源码 系统展示 基于微信小程序JavaSSMVueMySQL的宿舍管理系统【附源码文档…

UMI复现基础环境安装配置全流程(三)——UMI环境搭建

一、搭建UMI环境 &#xff08;二&#xff09;中安装了Anaconda3&#xff0c;在此基础上&#xff0c;创建umi环境&#xff0c;在universal_manipulation_interface-main文件夹中打开terminal并输入指令 conda env create -f conda_environment.yaml 此指令根据yaml文件创建环…

​数据编织+敏捷BI,打造企业智赢AI时代的双引擎丨直播预告

大数据产业创新服务媒体 ——聚焦数据 改变商业 随着数字化和智能化浪潮的不断推进&#xff0c;企业如何高效利用数据资源&#xff0c;成为了获取竞争优势的关键。在这样的背景下&#xff0c;我们诚邀您参加即将于2024年9月10日14:30开启的直播——“数据编织敏捷BI&#xff0…

实时通信利器:Web Broadcast Channel API 全面解读

一. 引言 在 Web 开发领域&#xff0c;实时通信一直是一个备受关注的话题。为了更好地实现实时消息传递和跨标签页通信&#xff0c;在 HTML5 规范中引入了 Web Broadcast Channel API。在本文中&#xff0c;我们将解析 Web Broadcast Channel API&#xff0c;探讨其用法以及相…

常见的正则化方法以及L1,L2正则化的简单描述

深度学习中的正则化是通过在模型训练过程中引入某些技术来防止模型过拟合的一种策略。过拟合是指模型在训练数据上表现非常好&#xff0c;但在新的、未见过的数据上表现不佳。正则化通过限制模型的复杂度或对模型参数施加约束&#xff0c;从而提高模型的泛化能力。 常见的正则…

【机器学习】高斯网络的基本概念和应用领域

引言 高斯网络&#xff08;Gaussian Network&#xff09;通常指的是一个概率图模型&#xff0c;其中所有的随机变量&#xff08;或节点&#xff09;都遵循高斯分布 文章目录 引言一、高斯网络&#xff08;Gaussian Network&#xff09;1.1 高斯过程&#xff08;Gaussian Proces…

Notepad++ 修改 About

1. 用这个工具&#xff0c;看标题&#xff0c;修改 1700 里的 Caption, 保存为 xx.exe, 2.修改链接&#xff0c;先准备如上。 2.1 使用插件 Hex Editor&#xff0c;拖入刚保存的 Notepad.exe 到 Notepad.exe, 按 c..S..H 2.2 按 ctrlf 查找 68 00 74 00 74 00 70 00 73 00 3…

ggplot作图基础

目录 ggplot作图语法 散点图 折线图 group分组 face_wrap()图像切片摆放 facet_grid()交叉分组切片 条形图 2.1 单组变量条形图 2.2 多维展示变量 直方图有与密度估计 直方图 密度估计图 ..density..语法和stat“density” ggplot作图语法 ggplot作图是将数据按需要进…

锡林郭勒奶酪品牌呼和浩特市大召店盛大开业

礼献中秋&#xff0c;香飘乳都。为进一步拓展锡林郭勒奶酪区域公用品牌产品销售渠道&#xff0c;9月8日&#xff0c;锡林郭勒奶酪区域公用品牌大召店在呼和浩特市大召广场月明楼隆重开业&#xff0c;现场为第三批新授权的39家奶酪生产经营主体代表授牌。至此&#xff0c;锡林郭…

Debian 12如何关闭防火墙

在Debian 12中&#xff0c;默认的防火墙管理工具是ufw&#xff08;Uncomplicated Firewall&#xff09;。您可以使用以下命令来关闭防火墙&#xff1a; 关闭防火墙&#xff1a; sudo ufw disable查看防火墙状态&#xff1a; sudo ufw status如果需要重新开启防火墙&#xff1a;…

9.8javaweb项目总结

1.主界面用户信息显示 登录成功后&#xff0c;将用户信息存储在记录在 localStorage中&#xff0c;然后进入界面之前通过js来渲染主界面 存储用户信息 将用户信息渲染在主界面上&#xff0c;并且头像设置跳转&#xff0c;到个人资料界面 这里数据库中还没有设置相关信息 2.模糊…

数学建模笔记—— 主成分分析(PCA)

数学建模笔记—— 主成分分析 主成分分析1. 基本原理1.1 主成分分析方法1.2 数据降维1.3 主成分分析原理1.4 主成分分析思想 2. PCA的计算步骤3. 典型例题4. 主成分分析说明5. python代码实现 主成分分析 1. 基本原理 在实际问题研究中,多变量问题是经常会遇到的。变量太多,无…

通信工程学习:什么是PSK相移键控、2PSK/BPSK二进制相移键控

PSK相移键控、2PSK/BPSK二进制相移键控 PSK&#xff08;相移键控&#xff09;和2PSK/BPSK&#xff08;二进制相移键控&#xff09;是两种在通信系统中广泛使用的调制技术。以下是对它们的详细解释&#xff1a; 一、PSK&#xff1a;相移键控 1、PSK相移键控的定义&#xff1a;…

websocket client无法连接到websocket server 的问题

1. 问题描述 生产环境的websocket client和server无法通信 2. 日志现象 通过查看日志和问题复现&#xff0c;定位到是client连接到server失败&#xff0c;导致无法通信。 出现问题的代码 出现问题的日志 21:25:27.790 [main] INFO websocket.MyWebSocketClient - start to…

力扣第347题 前K个高频元素

前言 记录一下刷题历程 力扣第347题 前K个高频元素 前K个高频元素 原题目&#xff1a; 分析 我们首先使用哈希表来统计数字出现的频率&#xff0c;然后我们使用一个桶排序。我们首先定义一个长度为n1的数组&#xff0c;对于下图这个示例就是长度为7的数组。为什么需要一个长…

Redis进阶(七):分布式锁

在分布式系统下&#xff0c;涉及到多个节点访问同一个公共资源的情况&#xff0c;此时需要通过 锁 进行互斥控制&#xff1a;避免出现 线程安全问题。 1.分布式锁的基本实现 超卖问题&#xff1a; 解决: 采用redis实现分布式锁 可用采取&#xff1a;在购票的时候&#xff0…

C语言 | Leetcode C语言题解之第390题消除游戏

题目&#xff1a; 题解&#xff1a; int lastRemaining(int n) {int a1 1;int k 0, cnt n, step 1;while (cnt > 1) {if (k % 2 0) { // 正向a1 a1 step;} else { // 反向a1 (cnt % 2 0) ? a1 : a1 step;}k;cnt cnt >> 1;step step << 1;}return …

【机器学习】和【人工智能】在量子力学的应用及代码案例分析

知孤云出岫 这里写目录标题 一、机器学习和人工智能在量子力学中的应用概述二、量子态的表示与模拟2.1 变分自编码器&#xff08;VAE&#xff09;用于量子态模拟 三、量子系统的哈密顿量学习3.1 使用机器学习推断哈密顿量 四、量子计算中的算法优化4.1 变分量子算法&#xff08…