

新闻资讯
技术学院std::list 是双向链表容器,支持 O(1) 插入删除但不支持随机访问;可空初始化、指定元素构造、初始化列表或范围构造;操作均基于迭代器,支持头尾及任意位置增删、条件删除;遍历须用迭代器或范围 for。
std::list 是 C++ 标准库提供的双向链表容器,支持在任意位置高效插入、删除(O(1)),但不支持随机访问(不能用下标 [] 直接取元素)。它适合频繁增删、不常遍历或查找的场景。
创建 li
st 有多种方式:
std::list lst;
std::list chars(5, 'a'); → 包含 5 个 'a'std::list nums = {1.1, 2.2, 3.3};
std::list lst(v.begin(), v.end()); (v 是 vector)所有插入/删除操作都基于迭代器,且保证常数时间复杂度:
lst.push_front(10); lst.push_back(20);
auto it = lst.begin(); ++it; lst.insert(it, 15);(在第二个位置插 15)lst.pop_front(); lst.pop_back();
lst.erase(it);
lst.remove_if([](int x) { return x % 2 == 0; });
list 不支持 operator[] 或 at(),必须用迭代器或范围 for:
立即学习“C++免费学习笔记(深入)”;
for (auto it = lst.begin(); it != lst.end(); ++it) { std::cout
for (auto rit = lst.rbegin(); rit != lst.rend(); ++rit) { std::cout
for (const auto& x : lst) { std::cout
lst.front(); lst.back();(使用前建议先判空)list 提供了一些专属成员函数,比通用算法更高效:
lst1.merge(lst2);(要求两者均已升序排序)lst1.splice(lst1.end(), lst2);(lst2 变为空)lst.remove(42);
lst.unique();(需先 sort)lst.sort(); 或传自定义比较器:lst.sort(std::greater());
注意:list 的迭代器是双向的(BidirectionalIterator),不能像 vector 那样做算术运算(如 it + 3),所有移动必须用 ++/--。