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

本文详细介绍了C++中vector容器的erase方法,包括删除单个元素和范围内的元素,并通过示例指出在循环中使用erase时可能导致的错误。作者强调了在迭代器更新后的正确处理方式,以及提供了修改建议,以避免错过应删除的元素。同时,文章提到了使用remove方法作为替代选择,并总结了使用vector::erase时应注意的事项。
摘要由CSDN通过智能技术生成

转自->这里

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; ...

随机推荐

通过 imagick 让 PHP 生成 PSD 文件缩略图

第一步.安装ImageMagick 首先需要安装 ImageMagick ,因为 imagick 是一个可以供 PHP 调用 ImageMagick 功能的PHP扩展.(目前最新版本是:ImageMa ...

Android应用程序消息处理机制

http://download.csdn.net/detail/luoshengyang/6439647 pdf

LeetCode&lpar;三&rpar;

最长不重复子串 public class Solution { public int lengthOfLongestSubstring(String s) { if(s==null || s.leng ...

4G通信技术LTE介绍

参考文档在这里 LTE技术 LTE是继GSM/EDGE和UMTS/HSxPA之后的由3GPP推出的移动网络技术最新标准,属于4G. 未来网络需要更高的数据速率,和包路由优化系统.更好的QoA和更廉价的 ...

JS頁面值傳遞

Maven工程的Web调试

1.添加Server,将Web工程和Tomcat关联起来: 1)Windows->Show views->Other-->Servers,将会在下方弹出Server的窗口,然后右键添 ...

elasticsearch集群搭建实例

elasticsearch集群搭建实例 下个月又开始搞搜索了,几个月没动这块还好没有落下. 晚上在自己虚拟机上搭建了一个简易搜索集群,分享一下. 操作系统环境: Red Hat 4.8.2-16 el ...

Heroku登录失败

Heoku 在国内,注册和登录是个大问题,不知道原来怎么注册上了,如今需要登录删除 app 就是删除不了.. 今天努力找了个vpn ,无奈还是登录不成功.https://id.heroku.com/l ...

day-1 用python编写一个简易的FTP服务器

从某宝上购买了一份课程,按照视频教程,用python语言,写了一个简易的FTP服务端和客户端程序,以前也用C++写过聊天程序,编程思路差不多,但是pytho ...

精通CSS&plus;DIV网页样式与布局--页面背景

上篇博客,我们主要简单的总结了CSS的图片效果,我们这回来讲讲CSS如何对网页的背景进行设置,网页的背景是整个网页的重要组成部分,她直接决定了整个网页的风格和色调.这篇博客简单的总结一下如何用CSS来 ...

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值