C++学习笔记总结练习--容器

news2025/1/17 23:14:33

容器

1 简介

新标准库的容器壁使用原始的数组实现的数据结构要快很多。经过了精心的优化。

确定使用哪种容器

  1. 除非有明确的理由,否则使用vector
  2. 随机元素访问vector或deque
  3. 容器中间插入或者插入元素list、forward_list
  4. 头尾插入元素,使用deque
  5. 可以在输入阶段随机插入的时候使用list,然后将复制好的放到vector中加速访问。

C++ STL容器的实现

在这里插入图片描述

C++ STL容器概览

在这里插入图片描述

2 容器通用操作

2.0 容器统一的操作

在这里插入图片描述
在这里插入图片描述

主要包括六类

  1. 构造函数(默认初始化、复制初始化、迭代器初始化、列表初始化)
  2. 赋值交换(c1=c2,c1={},assign,swap)
  3. 容器大小(size,max_size,empty)
  4. 插入删除(insert,emplace,erase,clear)
  5. 关系运算(六种关系)
  6. 迭代器(八个迭代器begin,end,cbegin,cend,rbegin,rend,crbegin,crend)

2.1 构造函数

  • 共5+3=8种容器的初始化方法。
方法说明
container c默认初始化。默认构造函数。
container c()值初始化。默认构造函数。
container c(c1)直接初始化。普通构造函数。
container c=c2拷贝初始化。拷贝构造函数。
container c{a,b,c,} container c={a,b,c,}列表地初始化。使用元素类型,初始化元素类型。对于没有初始化的元素,调用值初始化。
container c(iterator begin,iterator end)迭代器初始化。使用迭代器指向的范围内的元素进行初始化。
seq_container seq(n)顺序容器特有的初始化。创建包含n个元素的顺序容器,每个元素进行值初始化。
seq_container seq(n,t)顺序容器特有的初始化。创建包含n个t元素的顺序容器。每个元素都是t的copy。

在这里插入图片描述

2.2 赋值交换

  • 总共六个赋值交换函数。其中赋值为copy赋值。而不是引用copy。容器键的元素不会相互影响。
方法说明
c1=c2将c1中的元素替换为c2的copy。
c={a,b,c,}将c1中的元素替换为列表中元素的copy
swap(c1,c2)交换c1,c2容器中所有的元素。
c1.swap(c2)交换c1,c2容器中的所有元素。
seq.assign({a,b,c,})将seq中的元素替换为储值列表中的元素。
seq.assign(iterator begin,iterator end)将seq中的元素替换为迭代器指向的范围内的元素。
seq.assign(n,t)将seq中的元素替换为n个值为t的元素

在这里插入图片描述

2.3 容器大小

方法说明
int size()返回容器中元素的数目
bool empty()当size为0是返回true
int maxsize()返回容器所能容纳的最大元素数的值。

2.4 插入删除

方法说明
insert()插入对象
emplace()元素初始化插入
erase()删除指定元素
clear()清空

2.5 关系运算

  • 容器支持相等和不等的运算。== !=
  • 除了无序关联容器,都支持关系运算(> < >= <=)
  • 必须是相同各类型的容器,且元素类型相同才能比较。

2.6 迭代器

方法说明
begin(),end()一组迭代器。用来从前到后遍历元素。可以修改元素。
cbegin(),cend()一组迭代器。用来从前到后遍历元素。不可以修改元素。
rbegin(),rend()尾后迭代器。用来从后到前遍历元素。可以修改元素。
crbegin(),crend()尾后迭代器。用来从后到前遍历元素。不可以修改元素。

3 容器的容量问题

vector的存储

  • vector将元素连续存储
  • 容器会申请多余的内存空间以应对可能的元素增长。防止每次添加元素后,需要重新分配内存空间。性能会很慢。

管理容量的成员函数

在这里插入图片描述

容器删除问题

  1. 对于序列容器vector,deque来说,使用erase(itertor)后,后边的每个元素的迭代器都会失效,但是后边每个元素都会往前移动一个位置,但是erase会返回下一个有效的迭代器;
  2. 对于关联容器map set来说,使用了erase(iterator)后,当前元素的迭代器失效,但是其结构是红黑树,删除当前元素的,不会影响到下一个元素的迭代器,所以在调用erase之前,记录下一个元素的迭代器即可。
  3. 对于list来说,它使用了不连续分配的内存,并且它的erase方法也会返回下一个有效的iterator,因此上面两种正确的方法都可以使用。

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

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

相关文章

RelativeSource有四种类型

Self FindAncestor TemplatedParent PreviousData a.Self Self用于绑定源和绑定目标相同的场景中。对象的一个属性与同一对象的另一个属性绑定。 例如&#xff0c;让我们取一个高度和宽度相同的椭圆。在XAML文件中添加下面给出的代码。宽度属性与高度属性相对绑定。 <G…

Stephen Wolfram:“足够大的网络肯定能做任何事!”

“Surely a Network That’s Big Enough Can Do Anything!” “足够大的网络肯定能做任何事&#xff01;” The capabilities of something like ChatGPT seem so impressive that one might imagine that if one could just “keep going” and train larger and larger neura…

【Kubernetes】Kubernetes的部署

kubernetes 一、Kubernetes 的安装部署1. 常见的安装部署方式1.1 Minikube1.2 Kubeadm1.3 二进制安装部署 2. K8S 部署 二进制与高可用的区别2.1 二进制部署2.2 kubeadm 部署 二、Kubernetes 的部署过程1. 二进制部署1.1 服务器相关设置以及架构1.2 操作系统初始化配置1.3 部署…

【前端|Javascript第1篇】一文搞懂Javascript的基本语法

欢迎来到JavaScript的奇妙世界&#xff01;作为前端开发的基石&#xff0c;JavaScript为网页增色不少&#xff0c;赋予了静态页面活力与交互性。如果你是一名前端小白&#xff0c;对编程一无所知&#xff0c;或者只是听说过JavaScript却从未涉足过&#xff0c;那么你来对了地方…

《探索文心千帆大模型平台: 代码编写从此变得轻松》

文章目录 前言一、初识文心千帆1.1 功能丰富1.2 注册登录 二、内置第三方大模型2.1 ERNIE-Bot模型2.2 ERNIE-Bot-turbo模型2.3 BLOOMZ-7B模型2.4 Llama模型全家桶2.5 在线体验2.5.1 代码编写能力简单提问复杂提问报错解决添加注释 2.5.2 逻辑判断先有鸡还是先有蛋&#xff1f;鸡…

CTF-MISC:BUUCTF练习汇总(26-31题)

CTF-MISC&#xff1a;BUUCTF练习汇总 26、后门查杀27、webshell后门28、来首歌吧29、荷兰宽带数据泄露30、面具下的flag31、九连环 26、后门查杀 解题思路&#xff1a;题干可知webshell的密码为flag&#xff0c;且下载的文件为网站源码&#xff0c;人工查找不太现实&#xff0…

【框架篇】Spring MVC 介绍及使用(详细教程)

Spring MVC 介绍 1&#xff0c;MVC 设计模式 MVC&#xff08;Model-View-Controller&#xff09;是一种常见的软件设计模式&#xff0c;用于将应用程序的逻辑分离成三个独立的组件&#xff1a; 模型&#xff08;Model&#xff09;&#xff1a;模型是应用程序的数据和业务逻辑…

微信小程序iconfont真机渲染失败

解决方法&#xff1a; 1.将下载的.woff文件在transfonter转为base64&#xff0c; 2.打开网站&#xff0c;导入文件&#xff0c;开启base64按钮&#xff0c;下载转换后的文件 3. 在下载解压后的文件夹中找到stylesheet.css&#xff0c;并复制其中的base64 4. 修改index.wxss文…

proj库配置与使用(window11,vs2019,x64)

前置安装依赖 1.SQLite3 安装 亲测 (97条消息) SQLite3源码下载与编译&#xff08;开发环境&#xff1a;Win10VS2022&#xff09;_sqlite3 下载_林夕07的博客-CSDN博客 2.TIFF 亲测 (97条消息) Win11下基于cmake-3.26.3 完美编译 TIFF-4.5.0源码_tiff 编译_GIS子枫的博客-C…

免费的ssl证书

免费的SSL证书对于保证网站的安全性和信任度来说是非常重要的。虽然有些人可能会认为&#xff0c;免费的SSL证书可能不如付费的证书有效&#xff0c;但事实并非如此。 首先&#xff0c;免费的SSL证书同样能够为网站提供加密与解密的功能。这意味着所有的数据将会在传输过程中被…

【雷达通信】非相干多视处理(CSA)(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

[JAVA基础]自动拆装箱NPE问题

1.自动拆装箱场景 自动装箱 当把字面量转换成包装类的时候会自动装箱 比如&#xff1a; Integer a 1; Integer b 1; 自动拆箱 当你对包装类的对象进行运算&#xff08;如加法、减法等&#xff09;时&#xff0c;Java会自动进行拆箱操作。拆箱是将包装类型的对象转换为相应的基…

JavaScript 面向对象

一、对象 1.新建一个对象 // An object literal with two key-value pairs let spaceship {Fuel Type: diesel,color: silver }; We separate each key-value pair in an object literal with a comma (,) Keys are strings, but when we have a key that does not have any…

真人AI写真的制作方法-文生图换脸

AI写真最近火起来了&#xff0c;特别是某款现象级相机的出现&#xff0c;只需要上传自己的照片&#xff0c;就能生成漂亮的写真照&#xff0c;这一产品再次带火了AI绘画。今天我就来分享一个使用Stable Diffusion WebUI制作真人AI写真的方法&#xff0c;不用训练&#xff0c;快…

专家论道: 唐贤香云纱塑造中国非遗国际品牌

自“香云纱染整技艺”入选第二批国家级非物质文化遗产以来&#xff0c;被誉为纺织界“软黄金”的香云纱&#xff0c;重新焕发青春&#xff0c;频频登上时尚舞台&#xff0c;以不一样的面貌展示在世人面前&#xff0c;成为服装设计师、消费者青睐的材质。而随着北京卫视播出的《…

【JAVA】 javaSE中的数组|数组的概念使用

数组的概念 什么是Java中的数组 数组&#xff1a;可以看成是相同类型元素的一个集合。在内存中是一段连续的空间。在java中&#xff0c;包含6个整形类型元素的数组&#xff0c;可以看做是酒店中连续的6个房间. 1. 数组中存放的元素其类型相同 2. 数组的空间是连在一起的 3…

MySQL系统数据库及常用工具指令介绍

文章目录 1.系统数据库2.常用工具2.1 -e指令2.2 mysqladmin指令2.3 mysqlbinlog指令2.4 mysqlshow指令2.5 mysqldump指令 数据备份2.6 mysqlimport/source 指令 数据导入 3.指令小结 1.系统数据库 2.常用工具 2.1 -e指令 不用登陆mysql直接执行脚本命令 mysql -h192.168.200.…

一 关于idea如何在svn进行项目下载并运行成功

安装svn客户端 如图 安装时请选择该选项&#xff08;Will be installed on local hard drive&#xff09;并选择自己想要安装的目录路径 如图 svn安装成功 如图 注意 安装完成后&#xff0c;使用svn进行一次checkout的项目导出完成以上五步时&…

量化:numpy基础

文章目录 ndarray创建array创建顺序数组改变数据类型nan筛选元素去重重塑 ndarray numpy最重要的一个特点是其N维数组对象ndarry&#xff0c;它是一系列同类型数据的集合 创建array ndarry的创建方式如下&#xff1a; numpy.array(object, dtype None, copy True, order …

线上通过Nginx部署前端工程,并且配置SSL

介绍、为了更好的帮助大家学习&#xff0c;减少歧义,IP地址我就不隐藏了&#xff0c;公司也是我自己的公司。你们就别来攻击了。 下面给出步骤: 一、前期准备工作 通过在目标服务器上安装宝塔面板、安装redis、mysql、nginx、jdk环境等 1、 2、前端工程通过npm run build 打…