C++ list 容器用法
C++ list 容器用法
C++ 标准库提供了丰富的功能,其中 <list> 是一个非常重要的容器类,用于存储元素集合,支持双向迭代器。<list> 是 C++ 标准模板库(STL)中的一个序列容器,它允许在容器的任意位置快速插入和删除元素。与数组或向量(<vector>)不同,<list> 不需要在创建时指定大小,并且可以在任何位置添加或删除元素,而不需要重新分配内存。如果我们希望在一个序列中添加和删除元素的同时无须移动其他元素,可以使用 list 。

语法
以下是 <list> 容器的一些基本操作:
- 包含头文件:
#include <list> - 声明列表:
std::list<T> mylist;,其中T是存储在列表中的元素类型。 - 插入元素:
mylist.push_back(value); - 删除元素:
mylist.pop_back();或mylist.erase(iterator); - 访问元素:
mylist.front();和mylist.back(); - 遍历列表:使用迭代器
for (auto it = mylist.begin(); it != mylist.end(); ++it)
特点
- 双向迭代:
<list>提供了双向迭代器,可以向前和向后遍历元素。 - 动态大小:与数组不同,
<list>的大小可以动态变化,不需要预先分配固定大小的内存。 - 快速插入和删除:可以在列表的任何位置快速插入或删除元素,而不需要像向量那样移动大量元素。
常用成员函数
以下是 <list> 中一些常用的成员函数:
| 函数 | 说明 |
|---|---|
push_back(const T& val) | 在链表末尾添加元素 |
push_front(const T& val) | 在链表头部添加元素 |
pop_back() | 删除链表末尾的元素 |
pop_front() | 删除链表头部的元素 |
insert(iterator pos, val) | 在指定位置插入元素 |
erase(iterator pos) | 删除指定位置的元素 |
clear() | 清空所有元素 |
size() | 返回链表中的元素数量 |
empty() | 检查链表是否为空 |
front() | 返回链表第一个元素 |
back() | 返回链表最后一个元素 |
remove(const T& val) | 删除所有等于指定值的元素 |
sort() | 对链表中的元素进行排序 |
merge(list& other) | 合并另一个已排序的链表 |
reverse() | 反转链表 |
begin() / end() | 返回链表的起始/结束迭代器 |
声明与初始化
<list> 的声明和初始化与其他容器类似:
#include <iostream>
#include <list>int main()
{std::list<int> lst1; // 空的liststd::list<int> lst2(5); // 包含5个默认初始化元素的liststd::list<int> lst3(5, 10); // 包含5个元素,每个元素为10std::list<int> lst4 = {1, 2, 3, 4}; // 使用初始化列表return 0;
}
实例
例1、list 插入和删除元素
#include <iostream>
#include <list>int main()
{std::list<int> lst = {10, 20, 30};// 插入和删除元素lst.push_front(5); // 在头部插入5lst.push_back(40); // 在尾部插入40lst.pop_front(); // 删除头部元素lst.pop_back(); // 删除尾部元素// 输出链表内容std::cout << "List elements: ";for (const auto& elem : lst) {std::cout << elem << " ";}std::cout << std::endl;return 0;
}
例2、list 插入和删除特定位置的元素
#include <iostream>
#include <list>int main()
{std::list<int> lst = {1, 2, 3, 4, 5};auto it = lst.begin();std::advance(it, 2);// 移动迭代器到第3个元素(值为3)lst.insert(it, 10);// 在第3个元素前插入10lst.erase(it);// 删除第3个元素//输出链表内容std::cout << "List elements: ";for (const auto& elem : lst) {std::cout << elem << " ";}std::cout << std::endl;return 0;
}
例3、排序和去重
#include <iostream>
#include <list>int main()
{std::list<int> lst = {3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5};lst.sort();//排序lst.unique();//删除相邻重复元素//输出链表内容std::cout << "Sorted and unique list: ";for (const auto& elem : lst) {std::cout << elem << " ";}std::cout << std::endl;return 0;
}
例4、合并和反转
#include <iostream>
#include <list>int main()
{std::list<int> lst1 = {1, 3, 5, 7};std::list<int> lst2 = {2, 4, 6, 8};lst1.merge(lst2);//合并两个已排序的链表lst1.reverse(); //反转链表//输出链表内容std::cout << "Merged and reversed list: ";for (const auto& elem : lst1) {std::cout << elem << " ";}std::cout << std::endl;return 0;
}
与其他容器对比
| 特性 | std::list | std::vector | std::deque |
|---|---|---|---|
| 内存结构 | 非连续内存,双向链表 | 连续内存 | 分段连续内存 |
| 访问性能 | 顺序访问较快,随机访问慢 | 随机访问快 | 末尾和头部访问都快 |
| 插入/删除性能 | 任意位置插入、删除快 | 末尾插入快,中间位置慢 | 头尾插入、删除快 |
| 适用场景 | 频繁在中间插入/删除 | 需要高效随机访问 | 需要在头尾快速插入/删除 |
| 迭代器稳定性 | 稳定,元素插入或删除不会失效 | 插入、删除可能导致迭代器失效 | 插入、删除可能导致迭代器失效 |
注意事项
<list>的元素是按插入顺序存储的,而不是按元素值排序。- 由于
<list>的元素存储在不同的内存位置,所以它不适合需要随机访问的场景。 - 与向量相比,
<list>的内存使用效率较低,因为每个元素都需要额外的空间来存储指向前后元素的指针。

相关文章:
C++ list 容器用法
C list 容器用法 C 标准库提供了丰富的功能,其中 <list> 是一个非常重要的容器类,用于存储元素集合,支持双向迭代器。<list> 是 C 标准模板库(STL)中的一个序列容器,它允许在容器的任意位置快速…...
《 C++ 点滴漫谈: 二十四 》深入 C++ 变量与类型的世界:高性能编程的根基
摘要 本文深入探讨了 C 中变量与类型的方方面面,包括变量的基本概念、基本与复合数据类型、动态类型与内存管理、类型推导与模板支持,以及类型系统的高级特性。通过全面的理论讲解与实际案例分析,展示了 C 类型系统的强大灵活性与实践价值。…...
C语言初阶牛客网刷题—— HJ34 图片整理【难度:中等】
1. 题目描述 牛客网在线OJ链接 Lily上课时使用字母数字图片教小朋友们学习英语单词,每次都需要把这些图片按照大小(ASCII码值从小到大)排列收好。请大家给Lily帮忙,通过C语言解决。 输入描述:Lily使用的图片包括 “A…...
小盒科技携手体验家,优化智能教育服务体验,打造在线教育新高度
北京小盒科技有限公司(简称“小盒科技”,由“作业盒子”更名而来)是一家专注于教育科技的公司,致力于利用人工智能、大数据等先进技术,为中小学教育提供创新的解决方案和产品。 近日,「小盒科技」携手体…...
一个简单的自适应html5导航模板
一个简单的 HTML 导航模板示例,它包含基本的导航栏结构,同时使用了 CSS 进行样式美化,让导航栏看起来更美观。另外,还添加了一些 JavaScript 代码,用于在移动端实现导航菜单的展开和收起功能。 PHP <!DOCTYPE htm…...
HttpClient学习
目录 一、概述 二、HttpClient依赖介绍 1.导入HttpClient4依赖 2.或者导入HttpClient5依赖 3.二者区别 三、HttpClient发送Get请求和Post请求测试 (一)通过HttpClient发送Get请求 (二)通过HttpClient发送Post请求 一、概述 HttpClient是 Apache 软件基金会提供的一…...
二级 二维数组3
对角线之和 题目描述 输入一个矩阵,输出右上-左下对角线上的数字和 输入 输入1个整数N。(N<10)表示矩阵有n行n列 输出 对角线的和 样例 输入复制 4 1 2 3 4 2 3 4 5 4 5 6 7 1 2 3 4 输出复制 14 #include<iostream> using namespace std; int main() {i…...
【PyTorch][chapter 29][李宏毅深度学习]Fine-tuning LLM
参考: https://www.youtube.com/watch?veC6Hd1hFvos 目录: 什么是 Fine-tune 为什么需要Fine-tuning 如何进行Fine-tune Fine-tuning- Supervised Fine-tuning 流程 Fine-tuning参数训练的常用方案 LORA 简介 示例代码 一 什么是 Fine-tune …...
javascript-es6 (一)
作用域(scope) 规定了变量能够被访问的“范围”,离开了这个“范围”变量便不能被访问 局部作用域 函数作用域: 在函数内部声明的变量只能在函数内部被访问,外部无法直接访问 function getSum(){ //函数内部是函数作用…...
数据结构——二叉树——堆(1)
今天,我们来写一篇关于数据结构的二叉树的知识。 在学习真正的二叉树之前,我们必不可少的先了解一下二叉树的相关概念。 一:树的概念 树是一种非线性的数据结构,它是由n(n>0)个有限结点组成一个具有层…...
window保存好看的桌面壁纸
1、按下【WINR】快捷键调出“运行”窗口,输入以下命令后回车。 %localappdata%\Packages\Microsoft.Windows.ContentDeliveryManager_cw5n1h2txyewy\LocalState\Assets 2、依次点击【查看】【显示】,勾选【隐藏的项目】,然后按【CtrlA】全部…...
docker安装Redis:docker离线安装Redis、docker在线安装Redis、Redis镜像下载、Redis配置、Redis命令
一、镜像下载 1、在线下载 在一台能连外网的linux上执行docker镜像拉取命令 docker pull redis:7.4.0 2、离线包下载 两种方式: 方式一: -)在一台能连外网的linux上安装docker执行第一步的命令下载镜像 -)导出 # 导出镜像…...
98.1 AI量化开发:长文本AI金融智能体(Qwen-Long)对金融研报大批量处理与智能分析的实战应用
目录 0. 承前1. 简介1.1 通义千问(Qwen-Long)的长文本处理能力 2. 基础功能实现2.1 文件上传2.2 单文件分析2.3 多文件分析 3. 汇总代码&运行3.1 封装的工具函数3.2 主要功能特点3.3 使用示例3.4 首次运行3.5 运行结果展示 4. 注意事项4.1 文件要求4.2 错误处理机制4.3 最佳…...
【自然语言处理(NLP)】长短期记忆网络(Long - Short Term Memory,LSTM)原理和代码实现(从零实现、Pytorch实现)
文章目录 介绍长短期记忆网络(Long - Short Term Memory,LSTM)结构原理候选记忆元符号含义公式含义 记忆元符号含义公式含义 隐状态符号含义公式含义 特点应用实现 LSTMpytorch实现 个人主页:道友老李 欢迎加入社区:道…...
八股学习 微服务篇
微服务篇 常见面试内容Spring Cloud 常见组件注册中心Ribbon负载均衡策略服务雪崩 常见面试内容 Spring Cloud 常见组件 Spring Cloud有5个常见组件: Eureka/Nacos:注册中心;Ribbon:负载均衡;Feign:远程调用;Hystrix/Sentinel:服…...
TCP协议:互联网数据传输的守护者
在互联网的浩瀚海洋中,数据如同涓涓细流,无时无刻不在流动。而这些数据的稳定、可靠传输,离不开一个重要的协议——TCP(Transmission Control Protocol,传输控制协议)。TCP协议作为互联网协议族中的核心成员…...
协助工具-任意门导航
任意门导航网址:随意门导航-最全的实用导航网站,好用简洁宝藏网址神器...
【MCAL实战】MCU模块配置实践
目录 前言 正文 1.硬件分析 1.1 MCU系统模式分析 1.2MCU晶振使用分析 2.MCU通用配置 2.1 McuGeneralConfiguration 2.2 McuModuleConfiguration 2.3 McuResetSettingConf 2.4 McuTrapSettingConf 2.4 其他 3.MCU模式配置 3.1 McuModeSettingConf_0 3.2 McuModeSe…...
OpenAI 发布首个 AI 智能体
OpenAI 发布首个 AI 智能体 当地时间 1 月 23 日,OpenAI 发布了首个 AI 智能体 Operator124。以下是关于它的详细介绍2: 功能用途 操作网页:可模拟人类操作网页浏览器,能进行点击、滚动、输入等操作,例如在 OpenTable…...
【Python】导入类
随着不断给类添加功能,文件可能变得很长,即便妥善地使用了继承亦如此。为遵循Python的总体理念,应让文件尽可能整洁。 Python在这方面提供了帮助,允许将类存储在模块中,然后在主程序中导入所需的模块。 导入单个类 下…...
轻量部署开源网络性能测试工具:从环境搭建到性能调优全指南
轻量部署开源网络性能测试工具:从环境搭建到性能调优全指南 【免费下载链接】speedtest 项目地址: https://gitcode.com/gh_mirrors/spe/speedtest 在网络运维与开发过程中,准确掌握网络带宽性能是保障服务质量的关键。本文将介绍如何使用开源速…...
项目介绍 MATLAB实现基于Q-learning-DNN Q学习算法(Q-learning)结合深度神经网络(DNN)进行无人机三维路径规划的详细项目实例(含模型描述及部分示例代码) 还请多多点一下
MATLAB实现基于Q-learning-DNN Q学习算法(Q-learning)结合深度神经网络(DNN)进行无人机三维路径规划的详细项目实例 更多详细内容可直接联系博主本人 或者访问对应标题的完整博客或者文档下载页面(含完整的程序&…...
手把手教你用Vivado 2021配置Zynq UltraScale+ GTH回环测试(附工程源码)
Zynq UltraScale GTH回环测试实战指南:从原理到源码解析 在FPGA开发领域,高速串行接口的验证一直是工程师面临的关键挑战。Xilinx UltraScale架构中的GTH收发器以其高达16.3Gbps的线速率,成为医疗成像、雷达信号处理等高性能应用的理想选择。…...
Meta Manus vs OpenClaw:2026年AI Agent之战,谁才是你的最佳选择?
## 引言2026年AI Agent市场迎来爆发式增长,预计到2034年将达到1400亿美元规模。在这个赛道上,Meta的Manus和开源项目OpenClaw成为最受关注的两大竞争者。本文将深入分析两者的差异,帮助你做出最佳选择。## Meta Manus:巨头的入场#…...
setup-php 故障排除手册:常见问题解决方案与调试技巧
setup-php 故障排除手册:常见问题解决方案与调试技巧 【免费下载链接】setup-php shivammathur/setup-php: 是一个用于安装和配置 PHP 的脚本,可以方便地安装和配置 PHP 环境。适合对 PHP、环境配置和想要实现 PHP 环境配置的开发者。 项目地址: https…...
Spring_couplet_generation 学术研究价值:作为NLP文本生成任务的基准
Spring_couplet_generation:一个衡量NLP模型中文创作能力的基准任务 春联,作为中国传统文化的独特载体,其创作要求严格遵循平仄、对仗和意境的规则。这看似简单的红纸黑字,背后却蕴含着对语言韵律、语义对偶和美学意境的综合考验…...
ai赋能openclaw安装:快马平台智能诊断与个性化配置推荐系统
最近在折腾OpenClaw这个工具时,发现它的安装过程对新手不太友好,各种依赖关系和配置参数让人头大。不过好在现在有了AI辅助开发工具,整个过程变得轻松多了。今天就来分享下如何用智能诊断和个性化推荐系统搞定OpenClaw安装。 依赖关系智能分析…...
Qwen-Image-Edit-2509入门指南:无需代码,用自然语言编辑图片
Qwen-Image-Edit-2509入门指南:无需代码,用自然语言编辑图片 1. 什么是Qwen-Image-Edit-2509? 想象一下,你只需要对着电脑说"把这张照片里的蓝天换成夕阳",图片就自动完成了修改——这就是Qwen-Image-Edit…...
Qwen3-VL-8B开源AI聊天系统效果展示:多语言混合输入理解能力
Qwen3-VL-8B开源AI聊天系统效果展示:多语言混合输入理解能力 1. 系统概览与核心能力 Qwen3-VL-8B是一个基于通义千问大语言模型的Web聊天应用,提供了简洁美观的PC端聊天界面。这个完整的AI聊天系统包含前端界面、反向代理服务器和vLLM推理后端…...
5步解决Windows Defender被移除后的系统防护重建难题
5步解决Windows Defender被移除后的系统防护重建难题 【免费下载链接】windows-defender-remover A tool which is uses to remove Windows Defender in Windows 8.x, Windows 10 (every version) and Windows 11. 项目地址: https://gitcode.com/gh_mirrors/wi/windows-defe…...
