C++学习 --list
目录
1, 什么是list
2, 创建
2-1, 标准数据类型
2-2, 自定义数据类型
2-3, 其他创建方式
3, 操作list
3-1, 赋值
3-2, 添加元素
3-2-1, 添加元素(assign)
3-2-1-1, 标准数据类型
3-2-1-2, 自定义数据类型
3-2-2, 添加元素(insert)
3-2-2-1, 标准数据类型
3-2-2-2, 自定义数据类型
3-2-3, 添加元素(push_back | push_front)
3-2-3-1, 标准数据类型
3-2-3-2, 自定义数据类型
3-3, 查询
3-3-1, 标准数据类型
3-3-2, 自定义数据类型
3-4, 获取长度(size)
3-5, 设置长度(resize)
3-6, 判断是否为空(empty)
3-7, 删除元素
3-7-1, 头删(pop_front)
3-7-2, 尾删(pop_back)
3-7-3, 指定元素删除(erase)
3-8, 清空(clear)
3-9, 排序(sort)
3-10, 交换元素(swap)
3-11, 翻转
1, 什么是list
C++中的一种容器类型, 也叫链表, 数据是链式存储的, 物理上不是一段连续的存储空间, 逻辑上通过链表指针来数据连接
list由节点组成, 节点由存储数据的数据域和存储地址的指针域组成
其迭代器不支持随机访问, 只能前移或后移
因为不是标准数据类型, 需要包含头文件才能使用#include <list>
2, 创建
通过list<数据类型> 对象名, 可创建list, 数据类型可以是标准数据类型, 也可以是自定义类型
2-1, 标准数据类型
//list中的元素类型为string
list<string> l1;
2-2, 自定义数据类型
Myclass m1("aaa", 1);
//list容器中的数据类型为Myclass
list<Myclass> l1;
2-3, 其他创建方式
//通过拷贝构造创建
list<Myclass> l2(l1);
//通过迭代器区间方式创建
list<Myclass> l3(l1.begin(), l1.end());
//list容器中的元素为5个m1
list<Myclass> l4(5, m1);
3, 操作list
3-1, 赋值
通过list<数据类型> 对象名2 = 对象名1, 进行赋值
list<Myclass> l1;
list<Myclass> l2 = l1;
3-2, 添加元素
3-2-1, 添加元素(assign)
assign是用新的元素替换原来list的元素
3-2-1-1, 标准数据类型
//l1中分配5个字符串对象aaa
l1.assign(5, "aaa");
//l1中用3个字符串bbb, 替换上面的5个aaa
l1.assign(3, "bbb");
3-2-1-2, 自定义数据类型
Myclass m1("aaa", 1);
Myclass m2("bbb", 2);
list<Myclass> l1;
//l1中的元素为5个m1对象
l1.assign(5, m1);
//l1的元素被替换为5个m2对象替换
l1.assign(5, m2);
3-2-2, 添加元素(insert)
insert是向list指定位置, 添加元素, 支持一次添加多个元素
3-2-2-1, 标准数据类型
//在l1.begin()迭代器指向位置, 插入元素aaa
l1.insert(l1.begin(), "aaa");
//在l1.begin()迭代器指向位置, 插入3个字符串bbb
l1.insert(l1.begin(), 3, "bbb");
//在l1.begin()迭代器指向位置, 插入区间:l1.begin(), l1.end()指向的元素
l1.insert(l1.begin(), l1.begin(), l1.end());
3-2-2-2, 自定义数据类型
Myclass m1("aaa", 1);
Myclass m2("bbb", 2);
list<Myclass> l1;
//在l1.begin()迭代器指向位置, 插入元素m1
l1.insert(l1.begin(), m1);
//在l1.begin()迭代器指向位置, 插入3个m2
l1.insert(l1.begin(), 3, m2);
//在l1.begin()迭代器指向位置, 插入区间:l1.begin(), l1.end()指向的元素
l1.insert(l1.begin(), l1.begin(), l1.end());
3-2-3, 添加元素(push_back | push_front)
push_back是在尾部插入元素, push_front是在头部插入元素, 两者都只能单个添加
3-2-3-1, 标准数据类型
//在头部插入字符串元素bbb
l1.push_front("bbb");
//在尾部插入字符串元素aaa
l1.push_back("aaa");
3-2-3-2, 自定义数据类型
Myclass m1("aaa", 1);
Myclass m2("bbb", 2);
list<Myclass> l1;
//在头部插入元素m1
l1.push_front(m1);
//在尾部插入元素m1
l1.push_back(m2);
3-3, 查询
由于list的数据不在连续内存空间上, 所以不支持索引访问
通过对象名.front()获取首元素, 对象名.back(), 获取尾元素, 通过迭代器, 获取指定元素
3-3-1, 标准数据类型
//获取首元素
cout << l1.front() << endl;
//获取尾元素
cout << l1.back() << endl;
//通过迭代器获取元素
list<string>::iterator it = l1.begin();
it++;
it++;
cout << *it << endl;
3-3-2, 自定义数据类型
Myclass m1("aaa", 1);
Myclass m2("bbb", 2);
list<Myclass> l1;
//在头部插入字符串元素bbb
l1.push_front(m1);
//在尾部插入字符串元素aaa
l1.push_back(m2);
//获取首元素
cout << l1.front().m_name << " " << l1.front().m_age << endl;
//获取尾元素
cout << l1.back().m_name << " " << l1.back().m_age << endl;
//通过迭代器获取
list<Myclass>::iterator it = l1.begin();
it++;
cout << it->m_name << " " << it->m_age << endl;
3-4, 获取长度(size)
通过对象名.size(), 获取list的长度
cout << l1.size() << endl;
3-5, 设置长度(resize)
通过对象名.resize(), 设置list的长度
//设置list的长度为5
l1.resize(5);
//设置list的长度为10, 多余为用m1填充
l1.resize(10, m1);
3-6, 判断是否为空(empty)
通过对象名.empty(), 判断list是否为空, 为空返回1, 不为空返回0;
cout << l1.empty() << endl;
3-7, 删除元素
3-7-1, 头删(pop_front)
通过对象名.pop_front(), 删除list的头部元素
//删除deque中的首元素
l1.pop_front();
3-7-2, 尾删(pop_back)
通过对象名.pop_back(), 删除list的尾部元素
//删除deque中的尾元素
l1.pop_back();
3-7-3, 指定元素删除(erase)
通过对象名.erase(迭代器名称), 删除迭代器指向的元素
//删除指定的元素
l1.erase(d.begin());
list<Myclass>::iterator it;
it++;
l1.erase(it);
3-8, 清空(clear)
通过对象名.clear(), 删除迭代器指向的元素
//通过迭代器指定区间进行清空
l1.erase(l1.begin(), l1.end());
//清空元素
l1.clear()
3-9, 排序(sort)
list<string> l1;
l1.push_back("ddd");
l1.push_back("aaa");
l1.push_back("ccc");
l1.push_back("bbb");
l1.sort();
3-10, 交换元素(swap)
通过对象名1.swap(对象名2), 可交换两个list中的元素, 元素类型需要一致
l1.swap(l2);
3-11, 翻转
通过对象名.reverse(), 可翻转list中的元素
l1.reverse();
相关文章:
C++学习 --list
目录 1, 什么是list 2, 创建 2-1, 标准数据类型 2-2, 自定义数据类型 2-3, 其他创建方式 3, 操作list 3-1, 赋值 3-2, 添加元素 3-2-1, 添加元素(assign) 3-2-…...
Springboot集成swagger之knife4j
knife4j的最终效果: 支持直观的入参介绍、在线调试及离线各种API文档下载。 1 引入pom <dependency><groupId>com.github.xiaoymin</groupId><artifactId>knife4j-spring-boot-starter</artifactId><version>3.0.2</ver…...
多线程 02
1.线程的常见构造方法 方法说明Thread()创建线程对象Thread(Runnable target)使用 Runnable 对象创建线程对象Thread(String name)创建线程对象,并命名Thread(Runnable target, String name)使用 Runnable 对象创建线程对象,并命名【了解】Thread(Threa…...
车辆管控大数据可视化平台案例源码分析【可视化项目案例-10】
🎉🎊🎉 你的技术旅程将在这里启航! 🚀🚀 本专栏包括但不限于大屏可视化、图表可视化等等。订阅专栏用户在文章底部可下载对应案例源码以供大家深入的学习研究。 🎓 每一个案例都会提供完整代码和详细的讲解,不论你是初学者还是资深开发者,这里都有适合你的内容。…...
链表的回文结构
题目描述 题目链接:链表的回文结构_牛客题霸_牛客网 (nowcoder.com) 题目分析 我们的思路是: 找到中间结点逆置后半段比对 我们可以简单画个图来表示一下: ‘ 奇数和偶数都是可以的 找中间结点 我们可以用快慢指针来找中:l…...
CSS特效017:球体涨水的效果
CSS常用示例100专栏目录 本专栏记录的是经常使用的CSS示例与技巧,主要包含CSS布局,CSS特效,CSS花边信息三部分内容。其中CSS布局主要是列出一些常用的CSS布局信息点,CSS特效主要是一些动画示例,CSS花边是描述了一些CSS…...
Windows下安装Anaconda3并使用JupyterNoteBook
下载安装包 Anaconda官网 进官网,点击下载 自动根据当前系统下载对应的包了,安装包大约1G,喝杯Java耐心等待。 安装 很多人安装C盘,我这里放D盘。 注意:你的文件夹目录一定要不能有空格 然后其他的直接默认install即…...
什么年代了,还不会 CI/CD 么?
目录 什么是 CI/CD? CI/CD 对业务有哪些好处? 一:确保卓越的代码质量 二:更快的发布速度 → 更快的交付 三:自动化降低成本 四:故障隔离 五:简化回滚 六:持续反馈 七&#…...
centos 7.7 安装Python-3.7.4
一、安装PYTHON 编译依赖包 1.1 首先安装gcc编译器,gcc有些系统版本已经默认安装,通过 gcc --version 查看,没安装的先安装gcc, yum -y install gcc glibc make1.2 安装其它依赖包,(注:不要缺…...
git的用法
目录 一、为什么需要git 二、git基本操作 2.1、初始化git仓库 2.2、配置本地仓库的name和email 2.3、认识工作区、暂存区、版本库 三、git的实际操作 3.1 提交文件 3.2 查看git状态以及具体的修改 3.3 git版本回退 git reset 3.1 撤销修改 四、git分支管理 4.…...
管道在Vue和Angular中的作用及React的替代方案
管道在Vue和Angular中的作用及React的替代方案 前言管道起源管道特点 前端中管道概念和作用概念作用 React关于管道的替代方案Vue和Angular管道的区别 前言 本文主要讲解管道在Vue和Angular中有哪些作用以及React对于管道概念的替代方案是什么。 管道起源 计算机中的Pipline…...
计算机基础知识57
前后端数据传输的编码格式(contentType) # 我们只研究post请求方式的编码格式: get请求方式没有编码格式-- index?useranme&password get请求方式没有请求体,参数直接在url地址的后面拼接着 # 有哪些方式可以提交post请求:f…...
Flutter 小技巧之 3.16 升级最坑 M3 默认适配技巧
如果要说 Flutter 3.16 升级里是最坑的是什么?那我肯定要说是 Material 3 default (M3)。 倒不是说 M3 bug 多,也不是 M3 在 3.16 上使用起来多麻烦,因为虽然从 3.16 开始,MaterialApp 里的 useMaterial3 …...
激光雷达与惯导标定 | Lidar_IMU_Init : 编译
激光雷达与惯导标定:Lidar_IMU_Init 编译 功能包安装安装ceres-solver-2.0.0 (注意安装2.2.0不行,必须要安装2.0.0) LI-Init是一种鲁棒、实时的激光雷达惯性系统初始化方法。该方法可校准激光雷达与IMU之间的时间偏移量和外部参数…...
进程池,线程池与跨进程数据共享爬取某岸网图片
看教程的时候看到一个,生产者跟消费者的概念比较有意思,但是给的代码有问题无法正常运行,于是我就捣鼓了一下。 基本概念就是: 生产者: 一个进程获取网页没页的图片连接(主进程…...
【 图片加载】Vue前端各种图片引用
文章目录 一、图片作为js常量(常作为配置项的值 )1、在线链接2、本地图片 二、图片img标签1、一般的src2、动态的src用require3、src可以接收二进制文件blob(如后端返回的、a-upload传的图片) 三、背景图片 一、图片作为js常量(常…...
thinkphp6生成PDF自动换行
composer安装 composer require tecnickcom/tcpdf 示例 use TCPDF;public function info($university,$performance,$grade,$major){//获取到当前域名$domain request()->domain();//实例化$pdf new TCPDF(P, mm, A4, true, UTF-8, false);// 设置文档信息$pdf->SetCr…...
wpf devexpress实现输入验证使用验证规则
打开此项目 目标是一个registration form行为像google registration form。打开Google registration form 研究它的行为。当form是第一次显示,它的“Register”按钮应该启动;编辑器没有提示任何输入错误。输入First Name编辑器字段,清理输入…...
Vue表单的整体处理
在前端的处理中,表单的处理永远是占高比例的。在BOMDOMjs的时候是这样,在Vue的时候也是这样。Vue的表单处理做了特别的优化,如值绑定、数据验证、错误提示、修饰符等。 表单组件的示例: <script setup lang"ts">…...
探索实人认证API:保障在线交互安全的关键一步
前言 在数字化时代,随着人们生活的日益数字化,各种在线服务的普及,安全性成为用户体验的至关重要的一环。特别是在金融、电商、社交等领域,确保用户身份的真实性显得尤为重要。而实人认证API作为一种先进的身份验证技术ÿ…...
Stable Yogi Leather-Dress-Collection 模型文件管理与版本控制实践
Stable Yogi Leather-Dress-Collection 模型文件管理与版本控制实践 你是不是也遇到过这种情况:好不容易下载了一堆模型文件,有主模型、VAE、LoRA,还有各种配置文件,全都堆在下载文件夹里。过两天想用某个特定版本的模型…...
从 LLM 到 Agent:“工具”和“主动性”?
最近AI概念实在是太火,后端java仔不得不跟上时代。 从大语言模型出现以后,人们发现它可以写论文、写代码、做总结、回答问题,表现得非常强大。但在实际使用中,也逐渐暴露出几个明显问题: 第一,幻觉严重。…...
AI Agent工程师成长指南:从RAG原理到企业级应用实战
1. 从零到一:我的AI Agent工程师成长之路与实战心得最近几年,AI领域最让人兴奋的莫过于大模型和Agent技术的爆发。从ChatGPT横空出世,到各种智能体应用层出不穷,我身边不少做后端、做算法的朋友都在问:现在转行做AI应用…...
反向海淘系统架构设计:从单体到微服务的演进之路
## 引言反向海淘跨境电商系统作为连接中国供应链与海外消费者的技术桥梁,其架构设计直接影响系统的稳定性、扩展性和用户体验。本文将分享TaoCarts系统从单体架构到微服务架构的演进历程,以及在高并发场景下的性能优化实践。## 一、单体架构的瓶颈系统初…...
低场MRI仿真框架:优化非理想磁场下的图像重建
1. 低场MRI技术背景与挑战 磁共振成像技术在过去四十年中已成为临床诊断不可或缺的工具,但传统高场强(>1T)MRI系统存在体积庞大、造价高昂(通常超过千万元)和运维成本高等问题。这直接限制了MRI在基层医疗机构和特殊场景(如急诊…...
终极指南:用Python自动化你的COMSOL多物理场仿真工作流
终极指南:用Python自动化你的COMSOL多物理场仿真工作流 【免费下载链接】MPh Pythonic scripting interface for Comsol Multiphysics 项目地址: https://gitcode.com/gh_mirrors/mp/MPh 你是否厌倦了在COMSOL图形界面中重复点击菜单?是否希望将繁…...
重构仿真工作流:从手动操作到智能自动化的范式革命
重构仿真工作流:从手动操作到智能自动化的范式革命 【免费下载链接】MPh Pythonic scripting interface for Comsol Multiphysics 项目地址: https://gitcode.com/gh_mirrors/mp/MPh 在当今的工程研发和科学研究中,多物理场仿真已成为产品设计和性…...
LinkSwift网盘直链下载助手:免费解锁八大网盘高速下载的终极指南
LinkSwift网盘直链下载助手:免费解锁八大网盘高速下载的终极指南 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 ,支持 百度网盘 / 阿里云盘 / 中国移动云…...
向量值函数:从数学基础到工程应用
1. 向量值函数入门指南 第一次接触向量值函数时,我被这个看似复杂的数学概念吓到了。直到在实际物理问题中应用它来描述物体运动轨迹,才真正理解它的精妙之处。向量值函数就像一位多才多艺的翻译官,能够把简单的实数输入转换成多维空间的向量…...
CyberChef终极指南:免费在线网络安全瑞士军刀快速上手
CyberChef终极指南:免费在线网络安全瑞士军刀快速上手 【免费下载链接】CyberChef The Cyber Swiss Army Knife - a web app for encryption, encoding, compression and data analysis 项目地址: https://gitcode.com/GitHub_Trending/cy/CyberChef CyberCh…...
