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

C++--STL库-List

目录

1.list 的基本使用

1.1 创建和初始化

1.2. 插入元素

1.3. 删除元素

1.4. 访问元素

1.5 遍历

1.6 总结


list是C++标准库(STL)中的双向链表容器,属于<list>头文件。
它的特点是:
动态大小:可以随时插入或删除元素,不需要手动管理内存。
双向链表:每个节点都连接前后两个节点,支持双向遍历。
高效插入删除:插入和删除的时间复杂度是O(1),比vector快(vector可能会移动大量元素)。
随机访问慢:不像vector可以直接访问vec[i]list只能顺序遍历(O(n))。

1.list的基本使用

1.1创建和初始化

std::list<int> lst1; // 创建空 list std::list<int> lst2 = {1, 2, 3, 4, 5}; // 用初始化列表创建 std::list<int> lst3(5, 100); // 创建 5 个元素,每个值都为 100 std::list<int> lst4(lst2); // 拷贝构造

1.2. 插入元素

lst.push_back(10); // 尾部插入 10 lst.push_front(5); // 头部插入 5 auto it = lst.begin(); std::advance(it, 2); // 迭代器前进 2 步 lst.insert(it, 99); // 在第 3 个位置插入 99

1.3. 删除元素

lst.pop_back(); // 删除最后一个元素 lst.pop_front(); // 删除第一个元素 auto it = lst.begin(); std::advance(it, 1); lst.erase(it); // 删除第二个元素 lst.remove(3); // 删除所有值为 3 的元素 lst.clear(); // 清空 list

1.4. 访问元素

std::cout << lst.front(); // 访问第一个元素 std::cout << lst.back(); // 访问最后一个元素

1.5 遍历

// 方式 1:使用范围 for for (int num : lst) { std::cout << num << " "; } // 方式 2:使用迭代器 for (std::list<int>::iterator it = lst.begin(); it != lst.end(); ++it) { std::cout << *it << " "; }

1.6 总结

区别vector(动态数组)list(双向链表)
底层结构动态数组(连续内存)双向链表(分散存储)
访问速度随机访问快 (O(1))随机访问慢 (O(n))
插入删除尾部操作快 (O(1)),中间插入/删除慢 (O(n))任意位置插入/删除快 (O(1))
内存使用连续存储,节省空间,但可能需要扩容每个节点有额外指针开销,内存占用较大
遍历方式支持 [],可用 +、- 运算符只能用迭代器 ++ 或 --

  • pair<>:这是 C++ 标准库里的“对组”或“二元组”。它里面可以装两个不同类型的数据。比如pair<int, string>就是“一个整数 + 一个字符串”捆绑在一起。

  • list<>:这就是我们刚才聊的链表容器(双向链表)。

  • 合在一起list<pair<A, B>>:意思就是——这个链表里,每一个节点存储的数据,不再是一个普通的数字,而是一个“小包裹”(pair)

http://www.jsqmd.com/news/1322193/

相关文章:

  • Python游戏开发实战:从Pygame入门到打砖块项目全解析
  • Corona转V-Ray材质转换实战:从原理到视觉等效的完整指南
  • Unity角色移动系统设计:从输入处理到动画同步的五步实现
  • 八大网盘直链解析终极方案:告别限速,实现高效下载自由
  • GEO与SEO服务商能力全景对比:两者有何差别?6项核心差异解析及成都企业双赛道选型指南
  • CyberpunkSaveEditor:赛博朋克2077终极存档修改器完全指南
  • 解密网页版三国杀无名杀:开源策略卡牌游戏的完整体验指南
  • 终极指南:3个简单步骤掌握Vital光谱变形波表合成器,开启声音设计新纪元
  • 华为Mate40激活锁解除指南:官方渠道与安全技术方案详解
  • 8大免费激光点云数据集全解析:从KITTI到Waymo,覆盖自动驾驶与三维重建
  • 洛阳洛邑古城、十字街宝藏唐风民宿!鸿胪寺旧址庭院 + 80㎡全景露台,沉浸式梦回大唐 - GrowUME
  • 零延迟音频路由革命:BlackHole如何重塑你的macOS音频工作流
  • 如何快速入门情感分析?awesome-nlp-sentiment-analysis精选论文与工具推荐
  • 2128D Sum of LDS
  • Chunker终极指南:实现《我的世界》Java版与基岩版世界无损转换
  • TallStackUI完全指南:40+强大Blade组件提升Laravel TALL Stack开发效率
  • 打破设计壁垒:AI助手如何通过MCP协议直接操控Figma设计文件
  • 长沙唱歌培训哪家师资好?四步判断法 + 本地与线上机构师资横评 - 资讯报道
  • 手搓视觉SLAM定位算法:第一章
  • Claude智能体四层架构实战:工具安全、分级记忆与上下文截流
  • Alpha预乘原理与实战:解决Unity/After Effects透明图像边缘黑边问题
  • 【办公类-90-02】】20250215大班周计划四类活动的写法(分散运动、户外游戏、个别化综合)(基础列表采用读取WORD表格单元格数据,非采用切片组合)
  • SmartDNS完全指南:如何用智能DNS服务器加速你的网络访问速度
  • Kaneo安全配置:保护你的项目数据的7个关键步骤
  • 宝安新市民家庭如何让孩子稳稳扎根深圳?考家庭教育指导师证补齐陪伴短板 - 当下教育培训干货
  • 如何轻松突破QQ音乐格式限制:qmcflac2mp3完整指南
  • 武汉复读学校哪家好 - 湖北就要学教育
  • DLSS Swapper:革命性的游戏画质与性能智能调优方案
  • 嵌入式开发中的MIL/SIL/PIL/HIL测试:从模型到硬件的完整验证体系
  • Unity中文UI优化:TextMeshPro字体制作与性能调优实战