问题核心:erase之后迭代器是否失效

vector调用erase之后,该迭代器之后的迭代器都失效;

map调用erase之后,其他迭代器并不会失效。

 vector<int> vecData;
for (typeof(vecData.begin()) it; it != vecData.end();)
{
if (*it == )
{
it = vecData.erase(it);
//vv.erase(it++); //vector erase之后,it迭代器后面的所有迭代器都会失效,所有不能用这种方式
}
else
it++;
} map<int, int> mapData;
for (typeof(mapData.begin()) it = mapData.begin(); it != mapData.end(); )
{ if (it->second == )
{
/*
* it 赋值给一个中间变量tmp,传给erase
* it 自加
* map调用erase删除tmp迭代器指向的元素
* */
mapData.erase(it++); //map erase可以,因为map erase之后只有该迭代器自身失效,其他迭代器不会受影响
}
else
it++;
}

map/vector erase的更多相关文章

  1. vector.erase();vector.clear();map.erase();

    vector::erase()返回下一个iter: STL中的源码: //清除[first, last)中的所有元素 iterator erase(iterator first, iterator l ...

  2. c++如何遍历删除map/vector里面的元素

    新技能Get! 问题 对于c++里面的容器, 我们可以使用iterator进行方便的遍历. 但是当我们通过iterator对vector/map等进行修改时, 我们就要小心了, 因为操作往往会导致it ...

  3. map,vector 等容器内容的循环删除问题(C++)

    map,vector 等容器内容的循环删除问题(C++) map,vector等容器的循环删除不能用普通的方法删除: for(auto p=list.begin();p!=list.end();p++ ...

  4. 2018.09.26 洛谷P2464 [SDOI2008]郁闷的小J(map+vector)

    传送门 本来出题人出出来想考数据结构的. 但是我们拥有map+vector/set这样优秀的STL,因此直接用map离散化,vector存下标在里面二分找答案就行了. 代码: #include< ...

  5. UVa 11991:Easy Problem from Rujia Liu?(STL练习,map+vector)

    Easy Problem from Rujia Liu? Though Rujia Liu usually sets hard problems for contests (for example, ...

  6. 正确使用stl map的erase方法

    先声明:下面的文章是针对windows的用法,因为std::map的erase函数的windows的实现版本是返回一个std::map的迭代器,但是STL标准里面的该函数的返回值确是: map.era ...

  7. MSDN 中 对vector::erase()的解释.xml

    pre{ line-height:1; color:#f0caa6; background-color:#2d161d; font-size:16px;}.sysFunc{color:#e54ae9; ...

  8. vector::erase returns incompatible iterator in debug build

    关于std::vector中erase的用法http://www.cplusplus.com/reference/vector/vector/erase/ #include <vector> ...

  9. map的erase()释放内存

    STL中的map调用erase(it),当value值为指针时,释放内存: #include <iostream> #include <map> #include <st ...

随机推荐

  1. 初学node.js有感一

    Node.js感悟 一.前言 很久以前就对node.js十分的好奇和感兴趣,因为种种原因没能去深入的认识了解和学习掌握这门技术,最近正好要做一些项目,其中就用到了node.js中的一些东西,所以借着使 ...

  2. 如何遍历 Windows 摄像头设备?

    #include <stdlib.h> #include <iostream> #include <Windows.h> #include <comdef.h ...

  3. 【SSH框架】系列之 Spring 整合 Hibernate 框架

    1.SSH 三大框架整合原理 Spring 与 Struts2 的整合就是将 Action 对象交给 Spring 容器来负责创建. Spring 与 Hibernate 的整合就是将 Session ...

  4. 5.2 TLP的路由

    TLP的路由是指TLP通过Switch或者PCIe桥片时采用哪条路径,最终到达EP或者RC的方法.PCIe总线一共定义了三种路由方法,分别是基于地址(Address)的路由,基于ID的路由和隐式路由( ...

  5. PCI9054 突发模式数据传输 (burst mode data transfer )

    C mode target slave , 之前看PCI9054 datasheet知道这个burst mode ,也看了时序图,但是一直缺乏一个感性的认识. 今天网上买的 USB逻辑分析仪到货了,接 ...

  6. JavaScript实现弹窗报错

    JavaScript实现弹窗报错 1.具体错误如下 SCRIPT 5022:cannot call methods on dialog prior to initialization; attempt ...

  7. (十六)java中的String

    String:字符串类型,是java中最常用的引用类型,String是不可变的,java.lang.String是由final修饰,此类不可被继承.     String是不可变的,指的是字符串一旦创 ...

  8. 使用PHPword中文乱码并且下载的方法

    如果你的编码格式是utf-8的话就用这个 1.找到 Section.php 的 addText 函数 $givenText = utf8_encode($text); 改成 $givenText = ...

  9. type="submit" button的用法

    原因:关于页面刷新,或者点击某个按钮,开始能现实值,但几秒钟就会刷新掉的原因,这是因为sunmit 和button自带刷新属性,所以说少用就好,或者用returen fales 来断掉接下来的操作,当 ...

  10. Java并发编程-各种锁

    安全性和活跃度通常相互牵制.我们使用锁来保证线程安全,但是滥用锁可能引起锁顺序死锁.类似地,我们使用线程池和信号量来约束资源的使用, 但是缺不能知晓哪些管辖范围内的活动可能形成的资源死锁.Java应用 ...