std::list 是双向链表容器,支持 O(1) 插入删除但不支持随机访问;可空初始化、指定元素构造、初始化列表或范围构造;操作均基于迭代器,支持头尾及任意位置增删、条件删除;遍历须用迭代器或范围 for。

std::list 是 C++ 标准库提供的双向链表容器,支持在任意位置高效插入、删除(O(1)),但不支持随机访问(不能用下标 [] 直接取元素)。它适合频繁增删、不常遍历或查找的场景。
初始化与基本操作
创建 list 有多种方式:
-
空列表:
std::listlst; -
指定初始元素个数和值:
std::list→ 包含 5 个 'a'chars(5, 'a'); -
用初始化列表构造:
std::listnums = {1.1, 2.2, 3.3}; -
从其他容器范围构造:
std::list(v 是 vector)lst(v.begin(), v.end());
插入与删除(核心优势)
所有插入/删除操作都基于迭代器,且保证常数时间复杂度:
-
头部/尾部插入:
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 -
C++11 范围 for:
for (const auto& x : lst) { std::cout -
获取首尾元素(不检查空):
lst.front(); lst.back();(使用前建议先判空)
常用算法与特殊操作
list 提供了一些专属成员函数,比通用算法更高效:
-
合并两个有序 list:
lst1.merge(lst2);(要求两者均已升序排序) -
拼接另一个 list 到末尾:
lst1.splice(lst1.end(), lst2);(lst2 变为空) -
按值移除所有匹配项:
lst.remove(42); -
去重(相邻重复才删):
lst.unique();(需先 sort) -
排序(稳定排序):
lst.sort();或传自定义比较器:lst.sort(std::greater());
注意:list 的迭代器是双向的(BidirectionalIterator),不能像 vector 那样做算术运算(如 it + 3),所有移动必须用 ++/--。





