news 2026/4/14 20:49:56

15.C++入门:list|构造|使用|迭代器失效

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
15.C++入门:list|构造|使用|迭代器失效
list的介绍

list的文档介绍

list的构造
构造函数接口说明
list (size_type n, const value_type& val = value_type())构造的 list 中包含 n 个值为 val 的元素
list()构造空的 list
list (const list& x)拷贝构造函数
list (InputIterator first, InputIterator last)用 [first, last) 区间中的元素构造 list
list iterator的使用
函数声明接口说明
begin + end返回第一个元素的迭代器 + 返回最后一个元素下一个位置的迭代器
rbegin + rend返回第一个元素的 reverse_iterator (即 end 位置) + 返回最后一个元素下一个位置的 reverse_iterator (即 begin 位置)

【注意】

  1. begin与end为正向迭代器,对迭代器执行++操作,迭代器向后移动
  2. rbegin(end)与rend(begin)为反向迭代器,对迭代器执行++操作,迭代器向前移动
list capacity
函数声明接口说明
empty检测 list 是否为空,是返回 true,否则返回 false
size返回 list 中有效节点的个数
list element access
函数声明接口说明
front返回 list 的第一个节点中值的引用
back返回 list 的最后一个节点中值的引用
list modifiers
函数声明接口说明
push_front在 list 首元素前插入值为 val 的元素
pop_front删除 list 中第一个元素
push_back在 list 尾部插入值为 val 的元素
pop_back删除 list 中最后一个元素
insert在 list position 位置中插入值为 val 的元素
erase删除 list position 位置的元素
swap交换两个 list 中的元素
clear清空 list 中的有效元素
#include<iostream> #include<list> #include<vector> #include<algorithm> using namespace std; //int main() //{ // list<int> lt; // lt.push_back(1); // lt.push_back(2); // lt.push_back(3); // lt.push_back(4); // lt.push_back(5); // // 迭代器遍历 // list<int>::iterator it = lt.begin(); // while (it != lt.end()) // { // *it += 10; // // cout << *it << " "; // ++it; // } // cout << endl; // // 范围for遍历 // for (auto e : lt) // { // cout << e << " "; // } // cout << endl; // // 逆置 // lt.reverse(); // for (auto e : lt) // { // cout << e << " "; // } // cout << endl; // // return 0; //} void test_op1() { srand(time(0)); const int N = 1000000; list<int> lt1; list<int> lt2; vector<int> v; for (int i = 0; i < N; ++i) { auto e = rand(); lt1.push_back(e); v.push_back(e); } int begin1 = clock(); sort(v.begin(), v.end()); int end1 = clock(); int begin2 = clock(); lt1.sort(); int end2 = clock(); printf("vector sort:%d\n", end1 - begin1); printf("list sort:%d\n", end2 - begin2); } void test_op2() { srand(time(0)); const int N = 1000000; list<int> lt1; list<int> lt2; for (int i = 0; i < N; ++i) { auto e = rand(); lt1.push_back(e); lt2.push_back(e); } int begin1 = clock(); // vector vector<int> v(lt2.begin(), lt2.end()); // sort(v.begin(), v.end()); // lt2 lt2.assign(v.begin(), v.end()); int end1 = clock(); int begin2 = clock(); lt1.sort(); int end2 = clock(); printf("list copy vector sort copy list sort:%d\n", end1 - begin1); printf("list sort:%d\n", end2 - begin2); } //int main() //{ // list<int> lt; // lt.push_back(1); // lt.push_back(4); // lt.push_back(2); // lt.push_back(2); // lt.push_back(2); // lt.push_back(2); // lt.push_back(4); // lt.push_back(3); // // lt.push_back(5); // // for (auto e : lt) // { // cout << e << " "; // } // cout << endl; // // 先排序再去重 // lt.sort(); // lt.unique(); // for (auto e : lt) // { // cout << e << " "; // } // cout << endl; // // //sort(lt.begin(), lt.end()); // test_op2(); // // return 0; //} int main() { // LRU list<int> lt; lt.push_back(1); lt.push_back(2); lt.push_back(3); lt.push_back(4); lt.push_back(5); for (auto e : lt) { cout << e << " "; } cout << endl; // 把2转移到列表的尾部 lt.splice(lt.end(), lt, find(lt.begin(), lt.end(), 2)); for (auto e : lt) { cout << e << " "; } cout << endl; return 0; }
list的迭代器失效

可将迭代器暂时理解成类似于指针,迭代器失效即迭代器所指向的节点的无效,即该节点被删除了。因为list的底层结构为带头结点的双向循环链表,因此在list中进行插入时是不会导致list的迭代器失效的,只有在删除时才会失效,并且失效的只是指向被删除节点的迭代器,其他迭代器不会受到影响。

void TestListIterator1() { int array[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 }; list<int> l(array, array+sizeof(array)/sizeof(array[0])); auto it = l.begin(); while (it != l.end()) { // erase()函数执行后,it所指向的节点已被删除,因此it无效,在下一次使用it时,必须先给 其赋值 l.erase(it); ++it; } } // 改正 void TestListIterator() { int array[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 }; list<int> l(array, array+sizeof(array)/sizeof(array[0])); auto it = l.begin(); while (it != l.end()) { l.erase(it++); // it = l.erase(it); } }
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/3/26 8:23:02

M2FP在智能家居中的应用:人体姿态识别

M2FP在智能家居中的应用&#xff1a;人体姿态识别 随着智能硬件与AI算法的深度融合&#xff0c;人体理解技术正逐步成为智能家居系统的核心感知能力之一。从智能安防到个性化交互&#xff0c;再到健康监测与行为分析&#xff0c;精准识别人体结构与姿态是实现高级场景自动化的关…

作者头像 李华
网站建设 2026/4/14 20:49:56

M2FP模型在智能家居中的场景应用

M2FP模型在智能家居中的场景应用 &#x1f3e0; 智能家居中的人体感知需求演进 随着智能家居系统从“设备控制”向“情境理解”升级&#xff0c;传统基于红外或运动检测的感知方式已无法满足精细化交互需求。用户期望系统不仅能识别“是否有人”&#xff0c;还需理解“人在做什…

作者头像 李华
网站建设 2026/4/14 13:40:35

补体级联启动因子C1s

C1s是补体系统中不可或缺的一种蛋白质&#xff0c;补体C1复合物的组成部分&#xff0c;C1s是经典补体激活途径的启动因子。当C1复合物与与抗原结合的免疫球蛋白&#xff08;IgG或IgM&#xff09;复合物相结合时&#xff0c;C1s就会被激活&#xff0c;从而在病原体的表面形成抗原…

作者头像 李华
网站建设 2026/4/13 1:14:32

M2FP模型处理低光照图像的优化策略

M2FP模型处理低光照图像的优化策略 &#x1f311; 低光照场景下的语义分割挑战 在实际应用中&#xff0c;人体解析任务常面临复杂多变的光照条件。尤其是在低光照环境下&#xff0c;图像普遍存在亮度不足、对比度下降、噪声增强等问题&#xff0c;导致模型对边缘细节和颜色特征…

作者头像 李华
网站建设 2026/4/11 6:39:29

Z-Image-Turbo文物保护创新:破损文物修复效果预览生成

Z-Image-Turbo文物保护创新&#xff1a;破损文物修复效果预览生成 引言&#xff1a;AI赋能文化遗产保护的新范式 在数字人文与智能科技深度融合的今天&#xff0c;人工智能正以前所未有的方式介入文化遗产保护领域。传统文物修复依赖专家经验、耗时长且不可逆&#xff0c;而基于…

作者头像 李华