转自->这里

vector::erase():从指定容器删除指定位置的元素或某段范围内的元素
vector::erase()方法有两种重载形式
如下:
iterator erase(iterator _Where);
iterator erase(iterator _First,   iterator _Last);
如果是删除指定位置的元素时:
返回值是一个迭代器,指向删除元素下一个元素;
如果是删除某范围内的元素时:返回值也表示一个迭代器,指向最后一个删除元素的下一个元素;

     #include<iostream>
#include<vector>
using namespace std;
int main()
{
vector<int> array;
array.push_back();
array.push_back();
array.push_back();
array.push_back();
array.push_back();
array.push_back(); vector<int>::iterator itor;
vector<int>::iterator itor2;
for(itor=array.begin();itor!=array.end();)
{
if(==*itor)
{
itor2=itor;
itor=array.erase(itor2); }
itor++;
}
itor=array.begin();
for(itor=array.begin();itor!=array.end();)
{
cout<<(*itor++);
}
getchar();
return ;
}

看下面的程序,目的是删除数组里面的所有值为6的元素:

运行结果输出1362,可见其中一个6并未删除,这是迭代器的问题。
原因在于erase以后,itor已经指向下一个元素了,不应该在itor++,否则会跳过下一个元素,即连续两个6时跳过了第二个6.
另外,在itor2=itor时,两个itor是一样的,这样做并无意义。可修改如下:

     vector<int>::iterator itor;
// vector<int>::iterator itor2;
for(itor=array.begin();itor!=array.end();)
{
if(==*itor)
{
// itor2=itor;
itor=array.erase(itor);
}
else
{
itor++;
}
}

或者:

     vector<int>::iterator itor;
for(itor=array.begin();itor!=array.end();itor++)
{
if(==*itor)
{
itor=array.erase(itor);
itor--;
}
}

也可以使用remove方法:
array.earse( remove(array.begin(), array.end(),6),  array.end() );

vector.erase用法注意事项的更多相关文章

  1. vector中erase用法注意事项

    以前就发现了vector中的erase方法有些诡异(^_^),稍不注意,就会出错.今天又一次遇到了,就索性总结一下,尤其是在循环体中用erase时,由于vector.begin() 和vector.e ...

  2. C++中使用vector.erase()需要注意的事项

    本人菜鸟一枚.. 今天在用vector.erase()的时候,发现总是不能把应该erase掉的东西erase干净. 举个栗子: vector<int> num_vec; num_vec.p ...

  3. c++中vector的用法详解

    c++中vector的用法详解 vector(向量): C++中的一种数据结构,确切的说是一个类.它相当于一个动态的数组,当程序员无法知道自己需要的数组的规模多大时,用其来解决问题可以达到最大节约空间 ...

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

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

  5. STL中的Vector相关用法

    STL中的Vector相关用法 标准库vector类型使用需要的头文件:#include <vector>. vector 是一个类模板,不是一种数据类型,vector<int> ...

  6. C++学习二 vector的用法(使用sort对于vector排序)

    一.vector的介绍 vector是C++里面的一个容器,也是我们数学上面理解的向量,有一些比较常见的操作. 二.vector的定义 #include<vector> using nam ...

  7. STL vector常见用法详解

    <算法笔记>中摘取 vector常见用法详解 1. vector的定义 vector<typename> name; //typename可以是任何基本类型,例如int, do ...

  8. vector基本用法

    Vector作为STL容器中的一员,使用频率非常高,因此对其基本用法和实用技巧进行记录,便于后期查询使用. 基本用法 #include <iostream> #include <ve ...

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

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

随机推荐

  1. mysql 5.7 ERROR 1820 (HY000):

    在首次登录Mysql 5.7 后,mysql数据库做出了很多的调整.执行大部分操作会提示这个错误 : ERROR 1820 (HY000): You must reset your password ...

  2. Expected one result (or null) to be returned by selectOne(), but found: 3

    Expected one result (or null) to be returned by selectOne(), but found: 3 返回应该是对象但是给的是list

  3. Sql Server并发和事务

    锁的作用范围通常在事务中,事务是建立在并发模式下. 从SQL Server 2005开始,加入了一种新的并发模式-----乐观并发.不管使用哪种并发模式,如果多个会话同时修改相同的数据,都会产生资源争 ...

  4. DDD工作流持久化(十六)

    找到对应的sql文件执行sql语句 产生如下的表: 添加引用: 添加命名空间: using System.Activities.DurableInstancing; using System.Runt ...

  5. Leetcode刷题第003天

    一.只出现一次的数字 class Solution { public: int singleNumber(vector<int>& nums) { ; for (auto num ...

  6. KnockOut -- 快速入门

    简单示例 <!DOCTYPE html> <html lang="en"> <head> <meta charset="utf- ...

  7. 一脸懵逼搭建Zookeeper分布式集群

    1:首先将http://zookeeper.apache.org/ 下载好的zookeeper-3.4.5.tar.gz上传到三台虚拟机上,之前博客搭建好的(安装Zookeeper之前记得安装好你的j ...

  8. MySQL的预处理技术

    所谓的预处理技术,最初也是由MySQL提出的一种减轻服务器压力的一种技术! 传统mysql处理流程 1,  在客户端准备sql语句 2,  发送sql语句到MySQL服务器 3,  在MySQL服务器 ...

  9. 【回顾】html链接、头部

    1.HTML 链接 HTML 使用超级链接与网络上的另一个文档相连.几乎可以在所有的网页中找到链接.点击链接可以从一张页面跳转到另一张页面. HTML 超链接(链接) HTML使用标签 <a&g ...

  10. mysql binary

    mysql在比较字符串的时候是忽略大些写的 比如有用户叫ABC和abc select * from `sys_user` where username = 'abc' 会出来两条记录 select * ...