ToB企服应用市场:ToB评测及商务社交产业平台

标题: C++ STL(3)list [打印本页]

作者: 天空闲话    时间: 2024-10-2 07:29
标题: C++ STL(3)list
前言:
   C++ 标准模板库(STL)中的 list 容器是一种双向链表数据结构,它允许在常数时间内进行插入和删除操纵,而无需重新分配整个容器或移动大量元素。list 容器由一系列节点组成,每个节点包含数据部门和指向前后节点的指针,这种结构使得 list 在某些场景下非常高效。本文将重点先容 list 容器的内存存储机制及其常见用法。
  一、list 详解

1、内存管理

   list 容器的内存存储特点重要体现在以下几个方面:
  
2、常用操纵


3、迭代器+erase()删除list中的元素

   std::list 是一个双向链表容器,它提供了 erase 成员函数来删除元素。这个函数继承一个迭代器作为参数,该迭代器指向要删除的元素。调用 erase 后,该元素会从 list 中移除,而且 erase 会返回一个指向被删除元素之后位置的迭代器(如果存在的话;如果删除的是最后一个元素,则返回 end())。
  示例:
  1. #include <iostream>  
  2. #include <list>  
  3.   
  4. int main() {  
  5.     // 创建一个 list 并初始化  
  6.     std::list<int> myList = {1, 2, 3, 4, 5};  
  7.   
  8.     // 打印原始 list  
  9.     std::cout << "Original list: ";  
  10.     for (int val : myList) {  
  11.         std::cout << val << " ";  
  12.     }  
  13.     std::cout << std::endl;  
  14.   
  15.     // 创建一个迭代器指向要删除的元素(例如,值为 3 的元素)  
  16.     auto it = std::find(myList.begin(), myList.end(), 3);  
  17.   
  18.     // 检查是否找到了该元素  
  19.     if (it != myList.end()) {  
  20.         // 删除元素,并获取删除后下一个元素的迭代器  
  21.         it = myList.erase(it); // 注意:这里我们更新了 it 的值  
  22.   
  23.         // 可选:打印删除后的 list  
  24.         std::cout << "List after erasing 3: ";  
  25.         for (int val : myList) {  
  26.             std::cout << val << " ";  
  27.         }  
  28.         std::cout << std::endl;  
  29.     } else {  
  30.         std::cout << "Element 3 not found in the list." << std::endl;  
  31.     }  
  32.   
  33.     // 注意:如果你不打算使用擦除后返回的迭代器(即不关心擦除后的下一个元素),  
  34.     // 你也可以不更新 it,但之后不要使用它,因为它现在是一个无效迭代器。  
  35.   
  36.     return 0;  
  37. }
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4