C++ STL list 容器详解
简介
在 C++ 标准库中,std::list 是一个双向链表容器,定义在头文件 <list> 中。其元素在内存中不是连续存储的,而是通过节点之间的指针相互链接。这种结构使得它在插入和删除操作上具有独特优势,但代价是不支持随机访问。
注意:双向链表的底层通常包含一个哨兵位(头节点),它只用于占位而不存储有效数据。因此,头插操作实际是在哨兵位之后插入,头删则是移除哨兵位后的第一个节点。
核心特性
- 双向链表结构:每个元素包含前驱和后继指针,支持双向遍历。
- 动态内存分配:元素分散存储,无需预先分配固定大小的内存。
- 高效的插入删除:在已知位置时,插入或删除的时间复杂度为 O(1)。
- 不支持随机访问:访问特定元素需要从头或尾遍历,时间复杂度为 O(n)。
如需查阅详细接口文档,建议参考 cplusplus.com list 参考。
构造方式
list 对象可以在定义时进行初始化,常见的构造方式如下:
| 构造函数 | 功能说明 |
|---|---|
list() | 默认构造,创建一个空链表(仅含哨兵位) |
list(const list& lt) | 拷贝构造,用已存在的对象初始化 |
list(size_t n, const T& val) | 填充构造,用 n 个指定值初始化 |
list(InputIterator first, InputIterator last) | 迭代器区间构造,使用范围 [first, last) 内的元素初始化 |
list(std::initializer_list<T> ilist) | 初始化列表构造(C++11 引入) |
void test_construct() {
list<int> lt1; // 构造空链表
list<int> lt2(5, 1); // 使用 5 个 1 初始化
list<int> ;
;
;
}


