网上有很多这种例子:

void erase(vector<int> &v)
{
for(vector<int>::reverse_iterator ri=v.rbegin();ri!=v.rend();)
{
if(*ri % 2 == 0)
{
cout << "Erasing " << *ri << endl;
v.erase((++ri).base());
//用base()函数将逆向iterator转换为正向的
}
else
{
++ri;
}
}
}

  但这样再我自己的编译环境中始终异常中断,提示vector iterators incompatible,这种错误的原因就是迭代器与容器不兼容或者失效。

分析一下,erase函数执行完成后返回下个元素的指针,只要将这个指针转换成反向迭代器即可,一试果然如此。

void erase(vector<int> &v)
{
for(vector<int>::reverse_iterator ri=v.rbegin();ri!=v.rend();)
{
if(*ri % 2 == 0)
{
cout << "Erasing " << *ri << endl;
ri = vector<int>::reverse_iterator(v.erase((++ri).base())); //删除完要重置迭代器
}
else
{
++ri;
}
}
}

另附正向删除:

for (VectorType::iterator it = someVector.begin();; it != someVector.end();)
{ if (*it== value)
{
it = someVector.erase(it);
}
else
{
++it;
}
}

  

最新文章

  1. JS魔法堂:不完全国际化&amp;本地化手册 之 拓展篇
  2. C# 自定义序列化问题
  3. centos6.5搭建lnmp环境
  4. jQuery插件 -- Form表单插件jquery.form.js
  5. spring和redis的整合-超越昨天的自己系列(7)
  6. 安全终止MFC线程
  7. Java中Integer的源码学习
  8. java面向对象之 多态 Polymorphism
  9. Oracle 如何提交手册Cluster Table事务
  10. 如何查找Linux的函数定义的位置?
  11. Unity 3d中Shader是什么,可以吃吗?
  12. jsp 重定向技术
  13. 201521123034 《Java程序设计》第五周学习总结
  14. 第十三节,卷积神经网络之经典网络LeNet-5、AlexNet、VGG-16、ResNet(三)(后面附有一些网络英文翻译文章链接)
  15. BSGS与exBSGS学习笔记
  16. Cracking The Coding Interview 1.8
  17. WPF 网易云音乐PC端
  18. /etc/sudoers文件设置为允许用户在不输入该用户的密码的情况下使用所有命令
  19. Global and Local Coordinate Systems
  20. 记第一场atcoder和codeforces 2018-2019 ICPC, NEERC, Northern Eurasia Finals Online Mirror

热门文章

  1. NOI2017退役记
  2. C/C++获取Windows系统CPU和内存及硬盘使用情况
  3. 2014年将会受欢迎的IT技能--你有多少哪?
  4. Game with Powers
  5. eclipse编译Jmeter源码
  6. 微信小程序开发之页面数据绑定
  7. ubuntu的 mysql 存储目录迁移
  8. python 并发编程之IO 模型
  9. DOM学习笔记(一)DOM树
  10. laravel MVC分布及数据库配置