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在这方面提供了帮助,允许将类存储在模块中,然后在主程序中导入所需的模块。 导入单个类 下…...
Chapter03-Authentication vulnerabilities
文章目录 1. 身份验证简介1.1 What is authentication1.2 difference between authentication and authorization1.3 身份验证机制失效的原因1.4 身份验证机制失效的影响 2. 基于登录功能的漏洞2.1 密码爆破2.2 用户名枚举2.3 有缺陷的暴力破解防护2.3.1 如果用户登录尝试失败次…...
【根据当天日期输出明天的日期(需对闰年做判定)。】2022-5-15
缘由根据当天日期输出明天的日期(需对闰年做判定)。日期类型结构体如下: struct data{ int year; int month; int day;};-编程语言-CSDN问答 struct mdata{ int year; int month; int day; }mdata; int 天数(int year, int month) {switch (month){case 1: case 3:…...
设计模式和设计原则回顾
设计模式和设计原则回顾 23种设计模式是设计原则的完美体现,设计原则设计原则是设计模式的理论基石, 设计模式 在经典的设计模式分类中(如《设计模式:可复用面向对象软件的基础》一书中),总共有23种设计模式,分为三大类: 一、创建型模式(5种) 1. 单例模式(Sing…...
Qt/C++开发监控GB28181系统/取流协议/同时支持udp/tcp被动/tcp主动
一、前言说明 在2011版本的gb28181协议中,拉取视频流只要求udp方式,从2016开始要求新增支持tcp被动和tcp主动两种方式,udp理论上会丢包的,所以实际使用过程可能会出现画面花屏的情况,而tcp肯定不丢包,起码…...
CSS设置元素的宽度根据其内容自动调整
width: fit-content 是 CSS 中的一个属性值,用于设置元素的宽度根据其内容自动调整,确保宽度刚好容纳内容而不会超出。 效果对比 默认情况(width: auto): 块级元素(如 <div>)会占满父容器…...
xmind转换为markdown
文章目录 解锁思维导图新姿势:将XMind转为结构化Markdown 一、认识Xmind结构二、核心转换流程详解1.解压XMind文件(ZIP处理)2.解析JSON数据结构3:递归转换树形结构4:Markdown层级生成逻辑 三、完整代码 解锁思维导图新…...
Canal环境搭建并实现和ES数据同步
作者:田超凡 日期:2025年6月7日 Canal安装,启动端口11111、8082: 安装canal-deployer服务端: https://github.com/alibaba/canal/releases/1.1.7/canal.deployer-1.1.7.tar.gz cd /opt/homebrew/etc mkdir canal…...
2025-05-08-deepseek本地化部署
title: 2025-05-08-deepseek 本地化部署 tags: 深度学习 程序开发 2025-05-08-deepseek 本地化部署 参考博客 本地部署 DeepSeek:小白也能轻松搞定! 如何给本地部署的 DeepSeek 投喂数据,让他更懂你 [实验目的]:理解系统架构与原…...
VSCode 使用CMake 构建 Qt 5 窗口程序
首先,目录结构如下图: 运行效果: cmake -B build cmake --build build 运行: windeployqt.exe F:\testQt5\build\Debug\app.exe main.cpp #include "mainwindow.h"#include <QAppli...
运行vue项目报错 errors and 0 warnings potentially fixable with the `--fix` option.
报错 找到package.json文件 找到这个修改成 "lint": "eslint --fix --ext .js,.vue src" 为elsint有配置结尾换行符,最后运行:npm run lint --fix...
