C++ std::list详解:深入理解双向链表容器
本文将深入探讨C++ STL中的list容器,从基础概念到底层实现原理,全面解析这个强大的双向链表工具
一、什么是std::list?
std::list
是C++标准模板库(STL)中的一种序列容器,它实现了双向链表数据结构。与vector
和deque
不同,list在内存中不是连续存储的,而是由一系列通过指针连接的节点组成。
list的核心特性:
-
双向链表结构:每个元素包含指向前后节点的指针
-
高效插入删除:任意位置O(1)时间复杂度
-
非连续内存:元素分散存储,通过指针链接
-
迭代器稳定性:插入删除操作不会使迭代器失效(指向其他元素的迭代器)
-
无随机访问:不支持下标操作符[ ],访问元素需遍历
二、list基本操作
1. 包含头文件与声明
#include <list>// 声明一个整数list
std::list<int> myList;// 声明并初始化
std::list<std::string> names = {"Alice", "Bob", "Charlie"};
2. 添加元素
// 尾部添加
myList.push_back(10); // 头部添加
myList.push_front(5); // 指定位置插入
auto it = myList.begin();
std::advance(it, 2); // 移动迭代器到第3个位置
myList.insert(it, 7); // 在第三个位置插入7
3. 访问元素
// 访问首尾元素
int first = myList.front();
int last = myList.back();// 使用迭代器遍历
for(auto it = myList.begin(); it != myList.end(); ++it) {std::cout << *it << " ";
}// C++11范围for循环
for(int num : myList) {std::cout << num << " ";
}
4. 删除元素
//