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

深入理解STL list erase

1、list erase后,当前的迭代器失效,返回指向下一个节点的迭代器

#include<list>
#include<iostream>
#include<vector>
using namespace std;int main()
{list<int> ls;ls.push_back(1);ls.push_back(2);ls.push_back(3);list<int>::iterator it = ls.begin();for ( it = ls.begin(); it != ls.end();){if (*it == 2){ls.erase(it);}else{cout << *it << endl;it++;}}return 0;
}

ls.erase(it);后,it失效,再对其进行++将会导致软件崩溃,erase后返回一个新的有效的迭代器 it = ls.erase(it);才是正确的

list erase源码如下

    iterator erase(const const_iterator _Where) noexcept /* strengthened */ {
#if _ITERATOR_DEBUG_LEVEL == 2_STL_VERIFY(_Where._Getcont() == _STD addressof(_Mypair._Myval2), "list erase iterator outside range");
#endif // _ITERATOR_DEBUG_LEVEL == 2const auto _Result = _Where._Ptr->_Next;//销毁当前节点_Node::_Freenode(_Getal(), _Mypair._Myval2._Unlinknode(_Where._Ptr));//返回一个新的迭代器return _Make_iter(_Result);}_Nodeptr _Unlinknode(_Nodeptr _Pnode) noexcept { // unlink node at _Where from the list_Orphan_ptr2(_Pnode);_Pnode->_Prev->_Next = _Pnode->_Next;_Pnode->_Next->_Prev = _Pnode->_Prev;--_Mysize;return _Pnode;}
http://www.lryc.cn/news/505496.html

相关文章:

  • 使用 Python 从 ROS Bag 中提取图像:详解与实现
  • MYSQL执行一条update语句,期间发生了什么
  • 前端性能优化思路
  • 有向图判环(leetcode207,leetcode210)
  • 概率论得学习和整理25:EXCEL 关于直方图/ 频度图 /hist图的细节,2种做hist图的方法
  • PHP8.4下webman直接使用topthink/think-orm
  • 【从零开始入门unity游戏开发之——C#篇04】栈(Stack)和堆(Heap),值类型和引用类型,以及特殊的引用类型string,垃圾回收( GC)
  • 基于微信小程序的小区疫情防控ssm+论文源码调试讲解
  • 第P2周:Pytorch实现CIFAR10彩色图片识别
  • CTFHub 命令注入-综合练习(学习记录)
  • OpenCV目标检测 级联分类器 C++实现
  • QT6 Socket通讯封装(TCP/UDP)
  • elasticsearch设置密码访问
  • 彻底理解如何优化接口性能
  • C# 位运算
  • 【Flink-scala】DataStream编程模型之状态编程
  • RabbitMQ的核心组件有哪些?
  • 【Linux基础】基本开发工具的使用
  • 常见的数据结构和应用场景
  • 爬虫基础学习
  • C++对象数组对象指针对象指针数组
  • D96【python 接口自动化学习】- pytest进阶之fixture用法
  • 【算法】动态规划中01背包问题解析
  • 选择WordPress和Shopify:搭建对谷歌SEO友好的网站
  • 代理IP与生成式AI:携手共创未来
  • iOS 应用的生命周期
  • Elasticsearch 集群快照的定期备份设置指南
  • Docker--Docker Image(镜像)
  • C++ 中的序列化和反序列化
  • 我的Github学生认证申请过程