【转】vector中erase()的使用注意事项
vector::erase():从指定容器删除指定位置的元素或某段范围内的元素
vector::erase()方法有两种重载形式
如下:
iterator erase( iterator _Where);
iterator erase( iterator _First, iterator _Last);
如果是删除指定位置的元素时:
返回值是一个迭代器,指向删除元素下一个元素;
如果是删除某范围内的元素时:返回值也表示一个迭代器,指向最后一个删除元素的下一个元素;
看下面的程序,目的是删除数组里面的所有值为6的元素:
/**
*description:vector中erase()函数的使用注意事项
*author:CodingMengmeng
*time:2017-08-18 20:46:28
*example:删除vector中的6
*/
//#include <iostream>
//#include <vector>
//using namespace std;
//
//int main()
//{
// vector<int> array;
// array.push_back(1);
// array.push_back(6);
// array.push_back(3);
// array.push_back(6);
// array.push_back(6);
// array.push_back(2);
//
// vector<int>::iterator itor;
// vector<int>::iterator itor2;
// for (itor = array.begin(); itor != array.end();)
// {
// if (6 == *itor)
// {
// itor2 = itor;
// itor = array.erase(itor2);
// }
// itor++;
// }
// for (itor = array.begin(); itor != array.end();)
// {
// cout << (*itor++) << endl;
// }
// return 0;
//
//}
//输出
//1
//3
//6
//
可见,其中一个6并未删除,这是迭代器的问题。
原因在于erase之后,itor已经指向下一个元素了,不应该再itor++,否则会跳过下一个元素,即连续两个6时,跳过了第二个6。另外,在itor2=itor时,两个itor是一样的,这样做并没有意义,可修改如下:
/**
*description:修改后
*author:CodingMengmeng
*time:2017-08-18 20:49:12
*/ #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;
for (itor = array.begin(); itor != array.end();)
{
if ( == *itor)
{
itor = array.erase(itor);
}
else
{
itor++;
}
}
for (itor = array.begin(); itor != array.end();)
{
cout << (*itor++) << endl;
}
return ;
} //输出:
//1
//3
//
【转】vector中erase()的使用注意事项的更多相关文章
- vector中erase用法注意事项
以前就发现了vector中的erase方法有些诡异(^_^),稍不注意,就会出错.今天又一次遇到了,就索性总结一下,尤其是在循环体中用erase时,由于vector.begin() 和vector.e ...
- vector中erase()与insert()用法
erase()用法:https://blog.csdn.net/duan19920101/article/details/50717748 注:erase是删除指定位置的元素,不能删除给定元素值.若要 ...
- vector 中需要注意的东西!
vector的erase方法注意点!!! C++11是这样的: iterator erase (const_iterator position); iterator erase (const_iter ...
- vector中的erase方法[转+补充]
注释如下: iterator erase(iterator it); // 删除指定元素,并返回删除元素后一个元素的位置(如果无元素,返回end())iterator erase(iter ...
- map 和 vector 的erase函数说明
1. map的erase函数使用 这里首先要注意,C++针对map的erase函数有不同的函数原型,这往往是出现问题的关键所在.根据参考文献1: 在C++98中: (1) void erase (it ...
- vector中的元素删除
删除vector中的元素,最容易的方法就是使用vector的erase()函数. vector vec;for ( vector::iterator iter = vec.begin(); iter! ...
- C++之vector中元素删除
今天在删除vector中的元素中遇到一个问题,这里记录下来以便以后查阅. 预备知识:用到了erase()函数,对于一个容器c来说,假设迭代器为p,那么执行: c.erase(p)之后就删除了容器c中p ...
- BZOJ 2878([Noi2012]-失落的游乐园树DP+出站年轮加+后市展望DP+vector的erase)
2878: [Noi2012]迷失乐园 Time Limit: 10 Sec Memory Limit: 512 MBSec Special Judge Submit: 319 Solved: ...
- STL中erase()的陷阱
最近在刷stl源码剖析这本书时,对于vector的erase()函数引起了我的注意 在删除单个元素时是这样定义的: iterator erase(iterator position){ !=end() ...
随机推荐
- curator操作zookeeper
使用zookeeper原生API实现一些复杂的东西比较麻烦.所以,出现了两款比较好的开源客户端,对zookeeper的原生API进行了包装:zkClient和curator.后者是Netflix出版的 ...
- python 面向对象(五)约束 异常处理 MD5 日志处理
###############################总结###################### 1.异常处理 raise:抛出异常 try: 可能出现错误代码 execpt 异常类 a ...
- [NIO-4]选择器
选择器 最后,我们探索一下选择器.由于选择器内容比较多,所以本篇先偏理论地讲一下,后一篇讲代码,文章也没有什么概括.总结的,写到哪儿算哪儿了,只求能将选择器写明白,并且将一些相对重要的内容加粗标红. ...
- android 与html交互java调js与js调java操作
1.首先在项目下建一个assets目录(右击app->New->Folder->Assets Flolder),直接放在项目根目录下和res目录同级别(把所html,js,图片,cs ...
- ssm的架构及整合说明
SSM,即 SpringMVC.Spring 与 MyBatis 三个框架 它们在三层架构中所处的位置是不同的,即它们在三层架构中的功能各不相同,各司其职 SpringMVC:作为 View 层的实现 ...
- c++中sizeof的理解
1. 例题 #include <iostream> class A {}; class B { char m_data; }; class C { ]; }; class D { char ...
- Drupal8 入门教程(一)安装部署
一.Drupal简介 Drupal 是使用PHP语言编写的开源内容管理框架(CMF),它由内容管理系统(CMS)和PHP开发框架(Framework)共同构成.连续多年荣获全球最佳CMS大奖,是基于P ...
- [Android] Android 使用Greendao gradle 出现 Error:Unable to find method 'org.gradle.api.tasks.TaskInputs.file(Ljava/lang/Object;)
Android 使用Greendao gradle 出现 Error:Unable to find method 'org.gradle.api.tasks.TaskInputs.file(Ljava ...
- Java集合操作精华总结
一.Set1.HashSet boolean add(E e) 添加 访问 boolean remove(E e) 删除 Iterator<E> iterator 遍历 int size( ...
- hadoop3.x的安装
请看https://www.cnblogs.com/garfieldcgf/p/8119506.html