C++STL容器之list

devtools/2025/2/22 22:17:50/

1.介绍

        list是标准模版库(STL)提供的一个双向链表容器。它允许在常数时间内进行插入或删除操作,但不支持随机访问。(即不能通过下边直接访问元素)。list是一个序列容器,适合需要频繁插入和删除操作的场景。

2.list特性

  • 双向链表:每个元素都包含指向前一个和后一个元素的指针。

  • 高效的插入和删除:在任意位置插入和删除元素的时间复杂度为 O(1)。

  • 不支持随机访问:不能通过下标直接访问元素,必须通过迭代器遍历。

  • 内存开销较大:由于每个元素需要存储前后指针,内存占用比 vector 大。

3.list用法

        (1)定义与初始化

std::list<int> myList; // 定义一个空的整数链表
std::list<int> myList2 = {1, 2, 3, 4, 5}; // 初始化链表
std::list<int> myList3(5, 10); // 创建一个包含 5 个元素,每个元素为 10 的链表

        (2)插入元素

myList.push_back(10); // 在末尾插入 10myList.push_front(5); // 在开头插入 5auto it = myList.begin();
std::advance(it, 2); // 移动迭代器到第 2 个位置
myList.insert(it, 7); // 在第 2 个位置插入 7

        (3)删除元素

myList.pop_back(); // 删除末尾元素myList.pop_front(); // 删除开头元素auto it = myList.begin();
std::advance(it, 2); // 移动迭代器到第 2 个位置
myList.erase(it); // 删除第 2 个位置的元素
myList.remove(10); // 删除所有值为 10 的元素

        (4)访问元素

int firstElement = myList.front(); // 获取第一个元素
int lastElement = myList.back();  // 获取最后一个元素

        (5)遍历链表

for (auto it = myList.begin(); it != myList.end(); ++it) {std::cout << *it << " ";
}for (int val : myList) {std::cout << val << " ";
}

        (6)其他操作

if (!myList.empty()) { //判断是否为空std::cout << "List size: " << myList.size() << std::endl;
}myList.sort(); // 排序
myList.reverse(); // 反转
myList.clear(); // 清空链表

4.适用场景

  • 需要频繁在中间位置插入或删除元素。

  • 不需要随机访问元素。

  • 对内存占用不敏感。

如有错误,敬请指正!!!


http://www.ppmy.cn/devtools/161039.html

相关文章

PostgreSQL:更新字段慢

目录标题 PostgreSQL 慢查询优化与 pg_stat_statements 使用1. 启用慢查询日志2. 使用 pg_stat_statements 扩展收集查询统计信息3. 查找执行时间较长的查询4. 分析慢查询的执行计划5. 优化查询6. 检查并发连接和系统资源7. 进一步优化8. 查看某条SQL1. **如何生成 query_id**2…

【大模型】量化、剪枝、蒸馏

大模型的量化、剪枝和蒸馏是三种常用的模型优化技术&#xff0c;旨在减少模型的复杂性&#xff0c;降低计算资源消耗&#xff0c;并加速推理过程。下面是每种技术的详细介绍&#xff1a; 1. 量化&#xff08;Quantization&#xff09; 量化是将浮点数表示的模型参数&#xff…

Kafka在Windows系统使用delete命令删除Topic时出现的问题

在使用Windows的Kafka时&#xff0c;想要删除某一个主题&#xff0c;发现使用了delete之后会一直报警告。下面是我发现错误之后重新实测的Bug 先创建2个topic kafka-topics.bat --bootstrap-server localhost:9092 --topic test1 --createkafka-topics.bat --bootstrap-serve…

驱动开发WDK(1)-环境准备和初始程序。详细教程

得而不惜就该死 --yui 断断续续开始我的逆向部分。 Windows Driver Kit 一、准备 1、visual studio安装&#xff1a;如何下载Visual Studio2022编译器。详细教程_visual studio 2022下载教程-CSDN博客 2、sdk安装&#xff1a;默认已安装 3、wdk安装&#xff1a; win10版…

QT开发技术 [opencv加载onnx模型,dnn推理]

一、导出onnx 模型 yolo export modelxx\xx\best.pt formatonnx 二、qt加载onnx模型&#xff0c;推理显示 std::string fileName QCoreApplication::applicationDirPath().toStdString() "/Model/best.onnx";cv::dnn::Net net cv::dnn::readNetFromONNX(fileNam…

Rust 未来会成为主流的编程语言吗?

Rust是由Mozilla团队主导开发的编程语言&#xff0c;首次亮相是在2010年。自发布以来&#xff0c;Rust凭借其内存安全性、出色的性能和对并发操作的支持&#xff0c;逐渐吸引了众多开发者的关注。据Stack Overflow的2021年调查数据显示&#xff0c;Rust连续多年被开发者评为最喜…

软件测试:1、单元测试

1. 单元测试的基本概念 单元&#xff08;Unit&#xff09;&#xff1a;软件系统的基本组成单位&#xff0c;可以是函数、模块、方法或类。 单元测试&#xff08;Unit Testing&#xff09;&#xff1a;对软件单元进行的测试&#xff0c;验证代码的正确性、规范性、安全性和性能…

国产编辑器EverEdit - 如何在EverEdit中创建工程?

1 创建工程 1.1 应用场景 工程是一个文件及文件夹的集合&#xff0c;对于稍微有点规模的项目&#xff0c;一般都会包含多个文件&#xff0c;甚至还会以文件夹的形式进行分层管理多个文件&#xff0c;为了方便的管理这个项目&#xff0c;可以将这些文件和文件夹保存为一个工程。…