C++ STL list 容器详解与实战
在 C++ 标准模板库(STL)中,链表容器是处理动态数据的重要工具。虽然 vector 很常用,但在频繁插入删除的场景下,list 往往更合适。今天我们就来深入聊聊 list,顺便对比一下它的兄弟容器 forward_list。
forward_list 与 list 的区别
forward_list 和 list 都是链表实现,但侧重点不同。
forward_list 是 C++11 引入的单向链表。它只维护一个指向下一个节点的指针,内存开销小,适合只需要单向遍历且对内存敏感的场景。不过它不支持反向遍历,也不能通过索引访问元素。
list 则是基于带头双向循环链表实现的。每个节点都有前后两个指针,支持双向迭代器,可以随意向前或向后移动。虽然内存占用稍高,但在列表中间进行插入或删除操作时效率极高,时间复杂度接近 O(1)。如果你需要灵活的双向操作,list 是首选。
list 的核心接口使用
迭代器与遍历
list 的迭代器是双向迭代器,这意味着它支持 ++ 和 -- 操作。我们可以轻松实现顺序和逆序遍历。
#include <iostream>
#include <list>
using namespace std;
int main() {
list<int> li = { 1, 2, 3, 4, 5 };
// 顺序遍历
cout << "顺序遍历:";
for (auto it = li.begin(); it != li.end(); ++it) {
cout << *it << " ";
}
cout << endl;
// 逆序遍历
cout << "逆序遍历:";
for (auto rit = li.rbegin(); rit != li.rend(); ++rit) {
cout << *rit << " ";
}
cout << endl;
return 0;
}
运行后你会看到数字从 1 到 5,再从 5 到 1 输出。这种灵活性在处理复杂逻辑时非常有用。
初始化方式
list 的初始化方式和其他容器类似,支持多种构造方法。


