C++STL容器之list

1.介绍

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

2.list特性

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

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

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

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

3.list用法

(1)定义与初始化

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

(2)插入元素

cpp 复制代码
myList.push_back(10); // 在末尾插入 10

myList.push_front(5); // 在开头插入 5

auto it = myList.begin();
std::advance(it, 2); // 移动迭代器到第 2 个位置
myList.insert(it, 7); // 在第 2 个位置插入 7

(3)删除元素

cpp 复制代码
myList.pop_back(); // 删除末尾元素

myList.pop_front(); // 删除开头元素

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

(4)访问元素

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

(5)遍历链表

cpp 复制代码
for (auto it = myList.begin(); it != myList.end(); ++it) {
    std::cout << *it << " ";
}

for (int val : myList) {
    std::cout << val << " ";
}

(6)其他操作

cpp 复制代码
if (!myList.empty()) { //判断是否为空
    std::cout << "List size: " << myList.size() << std::endl;
}

myList.sort(); // 排序
myList.reverse(); // 反转
myList.clear(); // 清空链表

4.适用场景

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

  • 不需要随机访问元素。

  • 对内存占用不敏感。

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

相关推荐
名字还没想好☜23 分钟前
Python f-string 进阶:数字格式化、对齐填充、调试 = 号与嵌套表达式
开发语言·数据库·python·字符串格式化·f-string
·薯条大王1 小时前
经济实惠玩云服务器|一台云服务器多人共用,子账号配置教程
java·linux·运维·服务器·汇编·c++·python
一壶浊酒..4 小时前
Scrape Webpack练习
开发语言·javascript·webpack
命运之光4 小时前
【C语言完整代码】就诊信息管理系统
java·c语言·开发语言
命运之光5 小时前
【C语言完整代码】图书管理系统:图书馆场景下的增删改查实战
c语言·开发语言
猿长大人5 小时前
C# | Serilog 新手入门
开发语言·c#·.net·log
hansang_IR6 小时前
【题解】LC:倍增 / 区间并查集(Range Parallel Unionfind)
c++·算法·并查集
东东最爱敲键盘6 小时前
day7.c++继承
c++
在世修行6 小时前
从零打造 C# 工业视觉检测系统(七):串口通信 SerialPort 封装与开发
开发语言·c#·modbus rtu·rs232/rs485
沫璃染墨6 小时前
《从零入门Linux系统篇(十五):系统工具篇·六——GDB调试器详解:从程序执行控制到高级调试技巧》
linux·运维·服务器·c语言·c++