常德投诉网站,秦皇岛网站建设找汉狮,怎样用电脑ip做网站,duplicator wordpress文章目录 一、list 详解1、内存管理2、常用操作3、迭代器erase()删除list中的元素 前言#xff1a; C 标准模板库#xff08;STL#xff09;中的 list 容器是一种双向链表数据结构#xff0c;它允许在常数时间内进行插入和删除操作#xff0c;而无需重新分配整个容器或移动… 文章目录 一、list 详解1、内存管理2、常用操作3、迭代器erase()删除list中的元素 前言 C 标准模板库STL中的 list 容器是一种双向链表数据结构它允许在常数时间内进行插入和删除操作而无需重新分配整个容器或移动大量元素。list 容器由一系列节点组成每个节点包含数据部分和指向前后节点的指针这种结构使得 list 在某些场景下非常高效。本文将重点介绍 list 容器的内存存储机制及其常见用法。 一、list 详解
1、内存管理 list 容器的内存存储特点主要体现在以下几个方面 非连续存储 与数组不同list 的元素不存储在连续的内存块中。每个元素节点包含数据部分以及指向前后节点的指针。这种结构使得 list 能够灵活地在任意位置进行插入和删除操作。动态内存分配 每次插入新元素时list 会动态分配新的节点内存。这种机制避免了像 vector 那样在插入或删除元素时可能需要重新分配整个容器的内存从而减少了内存碎片化的风险。双向链表 每个节点包含两个指针一个指向前一个节点prev另一个指向下一个节点next。这使得 list 能够在常数时间内向前或向后遍历。
2、常用操作
push_back(const T value) 在 list 的末尾添加一个元素。push_front(const T value) 在 list 的开头添加一个元素。pop_back() 移除 list 的最后一个元素。pop_front() 移除 list 的第一个元素。insert(iterator pos, const T value) 在指定位置插入一个元素。erase(iterator pos) 移除指定位置的元素。erase(iterator first, iterator last) 移除指定范围内的元素。clear() 移除 list 中的所有元素。sort() 对 list 进行排序。sort(Compare comp) 使用自定义比较函数对 list 进行排序。reverse()反转 list 中元素的顺序。
3、迭代器erase()删除list中的元素 std::list 是一个双向链表容器它提供了 erase 成员函数来删除元素。这个函数接受一个迭代器作为参数该迭代器指向要删除的元素。调用 erase 后该元素会从 list 中移除并且 erase 会返回一个指向被删除元素之后位置的迭代器如果存在的话如果删除的是最后一个元素则返回 end()。 示例
#include iostream
#include list int main() { // 创建一个 list 并初始化 std::listint myList {1, 2, 3, 4, 5}; // 打印原始 list std::cout Original list: ; for (int val : myList) { std::cout val ; } std::cout std::endl; // 创建一个迭代器指向要删除的元素例如值为 3 的元素 auto it std::find(myList.begin(), myList.end(), 3); // 检查是否找到了该元素 if (it ! myList.end()) { // 删除元素并获取删除后下一个元素的迭代器 it myList.erase(it); // 注意这里我们更新了 it 的值 // 可选打印删除后的 list std::cout List after erasing 3: ; for (int val : myList) { std::cout val ; } std::cout std::endl; } else { std::cout Element 3 not found in the list. std::endl; } // 注意如果你不打算使用擦除后返回的迭代器即不关心擦除后的下一个元素 // 你也可以不更新 it但之后不要使用它因为它现在是一个无效迭代器。 return 0;
}