当前位置: 首页 > news >正文

C++ STL list容器详解与实战

C++ STL list 容器详解

一、基本特性
  1. 双向链表结构
    std::list是双向链表的模板类实现,每个节点包含数据域和指向前后节点的指针:
    struct ListNode { T data; ListNode* prev; ListNode* next; };
  2. 时间复杂度
    • 插入/删除:$O(1)$(已知迭代器位置)
    • 随机访问:$O(n)$
    • 排序:$O(n \log n)$(成员函数sort()

二、核心操作
1. 初始化
#include <list> std::list<int> lst1; // 空链表 std::list<int> lst2(5, 10); // 5个值为10的元素 std::list<int> lst3(lst2.begin(), lst2.end()); // 范围构造
2. 元素操作
lst.push_front(1); // 头部插入 lst.push_back(2); // 尾部插入 lst.insert(itr, 3); // 指定位置插入 lst.pop_front(); // 头部删除 lst.erase(itr); // 删除迭代器指向元素 lst.remove(10); // 删除所有值为10的元素
3. 迭代器
for (auto itr = lst.begin(); itr != lst.end(); ++itr) { std::cout << *itr << " "; }

三、模拟实现关键点
1. 节点结构
template <typename T> struct __list_node { T data; __list_node* prev; __list_node* next; };
2. 迭代器封装
template <typename T> struct __list_iterator { __list_node<T>* ptr; // 重载运算符 T& operator*() { return ptr->data; } __list_iterator& operator++() { ptr = ptr->next; return *this; } };
3. 核心接口实现
template <typename T> class my_list { private: __list_node<T>* __head; // 哨兵节点 public: void push_back(const T& val) { __list_node<T>* new_node = new __list_node<T>{val, __head->prev, __head}; __head->prev->next = new_node; __head->prev = new_node; } iterator begin() { return iterator(__head->next); } };

四、典型应用场景
  1. 频繁插入删除
    例如游戏中的动态对象管理:
    std::list<GameObject> obj_list; obj_list.erase(obj_list.begin()); // 快速移除首元素

    https://weibo.com/tv/show/1034:5272947355746318
    https://weibo.com/tv/show/1034:5272947355746318/
    https://weibo.com/tv/show/1034:5272947351289876
    https://weibo.com/tv/show/1034:5272947351289876/
    https://weibo.com/tv/show/1034:5272947296763909
    https://weibo.com/tv/show/1034:5272947296763909/
    https://weibo.com/tv/show/1034:5272947288637444
    https://weibo.com/tv/show/1034:5272947288637444/
    https://weibo.com/tv/show/1034:5272947221528604
    https://weibo.com/tv/show/1034:5272947221528604/
    https://weibo.com/tv/show/1034:5272947217334289
    https://weibo.com/tv/show/1034:5272947217334289/
    https://weibo.com/tv/show/1034:5272947141836830
    https://weibo.com/tv/show/1034:5272947141836830/
    https://weibo.com/tv/show/1034:5272947141836838
    https://weibo.com/tv/show/1034:5272947141836838/
    https://weibo.com/tv/show/1034:5272947032784907
    https://weibo.com/tv/show/1034:5272947032784907/
    https://weibo.com/tv/show/1034:5272947032522762
    https://weibo.com/tv/show/1034:5272947032522762/

  2. 大元素存储
    避免vector扩容时的拷贝开销:
    std::list<LargeData> data_chain;

    https://weibo.com/tv/show/1034:5272947355746318
    https://weibo.com/tv/show/1034:5272947355746318/
    https://weibo.com/tv/show/1034:5272947351289876
    https://weibo.com/tv/show/1034:5272947351289876/
    https://weibo.com/tv/show/1034:5272947296763909
    https://weibo.com/tv/show/1034:5272947296763909/
    https://weibo.com/tv/show/1034:5272947288637444
    https://weibo.com/tv/show/1034:5272947288637444/
    https://weibo.com/tv/show/1034:5272947221528604
    https://weibo.com/tv/show/1034:5272947221528604/
    https://weibo.com/tv/show/1034:5272947217334289
    https://weibo.com/tv/show/1034:5272947217334289/
    https://weibo.com/tv/show/1034:5272947141836830
    https://weibo.com/tv/show/1034:5272947141836830/
    https://weibo.com/tv/show/1034:5272947141836838
    https://weibo.com/tv/show/1034:5272947141836838/
    https://weibo.com/tv/show/1034:5272947032784907
    https://weibo.com/tv/show/1034:5272947032784907/
    https://weibo.com/tv/show/1034:5272947032522762
    https://weibo.com/tv/show/1034:5272947032522762/


五、性能对比
操作std::vectorstd::list
随机访问$O(1)$$O(n)$
头部插入$O(n)$$O(1)$
中间插入$O(n)$$O(1)$
局部排序低效高效(splice

提示:优先选择std::list的场景:

  • 元素大小超过缓存行(通常 > 64字节)
  • 需要高频在任意位置插入/删除
  • 需要稳定迭代器(无失效问题)
http://www.jsqmd.com/news/437780/

相关文章:

  • 2026年热门的广州悬空影院品牌推荐:广州轨道影院本地公司推荐 - 品牌宣传支持者
  • 全网最详细的 Node.js 卸载和安装教程
  • 鸽姆智库(GG3M)军事算法核心解析 |Core Analysis of GG3M Think Tank’s Military Algorithms
  • CISA:VMware Aria Operations RCE漏洞已遭利用
  • 混合云大数据架构:如何实现跨云数据无缝集成?
  • AI赋能离散制造业数字化工厂解决方案
  • 技术专家路线被严重低估了
  • 2026年知名的日照GEO推广品牌推荐:日照GEO推广高评分公司推荐 - 品牌宣传支持者
  • 芯片研发想跟上软件的节奏?
  • 2026年3月4隔夜暗盘挂单排行榜
  • 【深度学习与医学图像分析】深度卷积神经网络:图像分类、目标检测与语义分割
  • 【深度学习与医学图像分析】注意力机制与Transformer网络在医学图像分析中的理论与应用
  • php 使用 gateway-worker 创建websocket 服务器 (双ws架构)
  • 2026年靠谱的日照GEO排名优化品牌推荐:日照GEO排名优化热门公司推荐 - 品牌宣传支持者
  • 2026年比较好的日照GEO品牌推荐:日照GEO推广靠谱公司推荐 - 品牌宣传支持者
  • 电脑游戏卡顿不流畅怎么办?5种解决方法实测有效
  • 13.变量
  • 使用Canal将MySQL数据同步到ES(Linux)
  • 使用 Qt 插件和 SQLCipher 实现 SQLite 数据库加密与解密
  • GCC 静态链接过程中的【重定位】过程分析
  • 从零到精通精益生产:完整精益生产培训体系全梳理
  • 最新整理!常用的6款免费好用异地组网软件品牌推荐与选择指南
  • 小企业做供应链,为什么从“数据看板”开始最有效?
  • 丝杆模组润滑自检指南
  • 2026年知名的日照短视频投放品牌推荐:日照短视频排名用户好评公司 - 品牌宣传支持者
  • 使用Docker部署postgresql
  • 伊朗成为全球焦点,再看这部三维动画是否早有预示?
  • 使用Springboot + netty 打造聊天服务(一)
  • 使用rustDesk搭建私有远程桌面
  • 太空钙钛矿光伏电池的光模拟抗辐射性能研究