c语言vector+erase用法,vector.erase用法注意事项

转自->这里

vector::erase():从指定容器删除指定位置的元素或某段范围内的元素

vector::erase()方法有两种重载形式

如下:

iterator erase(iterator _Where);

iterator erase(iterator _First,   iterator _Last);

如果是删除指定位置的元素时:

返回值是一个迭代器,指向删除元素下一个元素;

如果是删除某范围内的元素时:返回值也表示一个迭代器,指向最后一个删除元素的下一个元素;

#include

#include

using namespace std;

int main()

{

vector array;

array.push_back();

array.push_back();

array.push_back();

array.push_back();

array.push_back();

array.push_back();

vector::iterator itor;

vector::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<

}

getchar();

return ;

}

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

运行结果输出1362,可见其中一个6并未删除,这是迭代器的问题。

原因在于erase以后,itor已经指向下一个元素了,不应该在itor++,否则会跳过下一个元素,即连续两个6时跳过了第二个6.

另外,在itor2=itor时,两个itor是一样的,这样做并无意义。可修改如下:

vector::iterator itor;

// vector::iterator itor2;

for(itor=array.begin();itor!=array.end();)

{

if(==*itor)

{

// itor2=itor;

itor=array.erase(itor);

}

else

{

itor++;

}

}

或者:

vector::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用法注意事项

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

C&plus;&plus;中使用vector&period;erase&lpar;&rpar;需要注意的事项

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

c&plus;&plus;中vector的用法详解

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

vector&colon;&colon;erase returns incompatible iterator in debug build

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

STL中的Vector相关用法

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

C&plus;&plus;学习二 vector的用法&lpar;使用sort对于vector排序&rpar;

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

STL vector常见用法详解

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

vector基本用法

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

MSDN 中 对vector&colon;&colon;erase&lpar;&rpar;的解释&period;xml

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

随机推荐

Linux虚拟机的安装(使用Centos6&period;3)

1.什么是虚拟机? 虚拟机指通过软件模拟的具有完整硬件系统功能的.运行在一个完全隔离环境中的完整计算机系统 2.安装Linux虚拟机前要做的准备 2.1:一台windows环境的pc 2.2:下载VM ...

LeetCode OJ-- String to Integer &lpar;atoi&rpar; &ast;&ast;

https://oj.leetcode.com/problems/string-to-integer-atoi/ 细节题,把一个字符串转换成整数 class Solution { public: in ...

各种Camera,总有一款适合你(二)

在实际的项目开发中,一般需要程序抽象出一些在几何意义上有明确意义的参数,这样方便策划或美术在自己的机器上进行调试. 下面是一个可变参的地下城摄像机的简单实现: // 第三人称摄像机,平移和旋转会同时进 ...

Oracle 给已创建的表增加自增长列

对于已经创建的表,在特殊需求下,需要增加一个自增长列步骤: --1. 增加 自增长列 ); --2. 程序方式更新设置 IdNum 列 值 --3.查询最大 ) From Limsbusinessen ...

SIFT算法:特征描述子

SIFT算法:DoG尺度空间生产  SIFT算法:KeyPoint找寻.定位与优化 SIFT算法:确定特征点方向  SIFT算法:特征描述子 目录: 1.确定描述子采样区域 2.生成描述子 2.1 旋 ...

51单片机 Keil C 延时程序的简单&lpar;晶振12MHz&comma;一个机器周期1us&period;&rpar;

一. 500ms延时子程序 void delay500ms(void) { unsigned char i,j,k; ;i>;i--) ;j>;j--) ;k>;k--); } 产生 ...

temp-成都农商行路径

route add 30.3.4.0 mask 255.255.255.0 30.3.12.254 route add 30.3.12.0 mask 255.255.255.0 30.3.12.254 ...

spring MVC 原理及源码解析

首先要知道springmvc的核心控制器dispatcherServlet(继承自httpServlet) 一般httpServlet的请求过程: 1.初始化(创建servlet实例时)时会执行ser ...

容器中JVM获取真实的CPU核数

容器中JVM获取真实的CPU核数 基于 libsysconfcpus的方案,可以为各个版本的JDK提供一个通用的解决方案. libsysconfcpus.so的原理是截获JVM获取CPU核数所用的系统 ...

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值