vector erase
vector::erase 从指定容器删除指定的元素
两个重载:
iterator erase (iterator position);
删除指定位置position的元素,并返回删除元素的下一个元素的迭代器
iterator erase (iterator first, iterator last);
删除从first到last(不包过last)之间的元素 [first,last),并返回last位置迭代器 遍历删除元素方法:
1.
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(); itor++){
if (*itor == ) array.erase(itor);
} for (itor = array.begin(); itor != array.end(); itor++)
{
cout << *itor << " ";
}
这种使用方法会内存错误,因为删除itor指定元素后,itor就编程野指针了,正确使用是itor重新赋值为erase返回值。
2.
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(); itor++){
if (*itor == ) itor=array.erase(itor);
} for (itor = array.begin(); itor != array.end(); itor++)
{
cout << *itor << " ";
}
这个方式在删除连续元素会错误,结果发现是100 300 300 500,因为itor指向删除元素下一个元素后,itor++就跳过了删除元素的下一个元素。
3.正确使用方式
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(); itor++)
{
cout << *itor << " ";
}
vector erase的更多相关文章
- MSDN 中 对vector::erase()的解释.xml
pre{ line-height:1; color:#f0caa6; background-color:#2d161d; font-size:16px;}.sysFunc{color:#e54ae9; ...
- vector::erase returns incompatible iterator in debug build
关于std::vector中erase的用法http://www.cplusplus.com/reference/vector/vector/erase/ #include <vector> ...
- map/vector erase
问题核心:erase之后迭代器是否失效 vector调用erase之后,该迭代器之后的迭代器都失效: map调用erase之后,其他迭代器并不会失效. vector<int> vecDat ...
- C++中使用vector.erase()需要注意的事项
本人菜鸟一枚.. 今天在用vector.erase()的时候,发现总是不能把应该erase掉的东西erase干净. 举个栗子: vector<int> num_vec; num_vec.p ...
- vector.erase用法注意事项
转自->这里 vector::erase():从指定容器删除指定位置的元素或某段范围内的元素 vector::erase()方法有两种重载形式 如下: iterator erase(iterat ...
- vector.erase();vector.clear();map.erase();
vector::erase()返回下一个iter: STL中的源码: //清除[first, last)中的所有元素 iterator erase(iterator first, iterator l ...
- stl vector erase
C++ Code 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849 ...
- C++ 容器 LIST VECTOR erase
在Vector中 做erase操作就是按照下面的步骤来做的: copy() destory(); 在list容器中 erase操作 destory() deallocate() Vector使用从某 ...
- C++ vector erase函数的使用注意事项
最近使用了顺序容器的删除元素操作,特此记录下该函数的注意事项. 在C++primer中对c.erase(p) 这样解释的: c.erase(p) 删除迭代器p所指向的元素,返回一个指向被删元素 ...
随机推荐
- OutSystems学习笔记。
ew job and new software, new challenge as well. OutSystems这软件挺好上手的.虽然没有中文文档,但英文文档超级详细,堪称傻瓜版SOP 照着步骤写 ...
- 自动生成数据库字典(sql2008) 转自 飘渺の云海
每次做项目的时候都要做数据字典,这种重复的工作实在很是痛苦,于是广找资料,终于完成了自动生成数据库字典的工作,废话少说,上代码. 截取一部分图片: 存储过程: SET ANSI_NULLS ON GO ...
- .Net高阶异常处理第二篇~~ dump进阶之MiniDumpWriter
dump文件相信有些朋友已经很熟悉了,dump文件的作用在于保存进程运行时的堆栈信息,方便日后排查软件故障,提升软件质量.关于dump分析工具windbg.adplus的文章更多了,如果您还不知道怎么 ...
- JS 操作 HTML 和 AJAX 请求后台数据
为某个元素插入值,添加属性,添加子元素 <div class="col-sm-6"> <select class="form-control" ...
- 【3】.net MVC 使用IPrincipal进行Form登录即权限验证
1.在MVC项目中添加用户类,可以根据实际项目需求添加必要属性 public class UserData { /// <summary> /// ID /// </summary& ...
- 转IE9以下$.ajax跨域返回“No transport”
$.ajax({ type: "POST", async: false, contentType: "application/x-www-form-urlencoded; ...
- 实现把dgv里的数据完整的复制到一张内存表
/// <summary> /// 方法实现把dgv里的数据完整的复制到一张内存表 /// </summary> /// <param name="dgv&qu ...
- redis(3)发布订阅
一.发布/订阅模式 在软件工程里面,发布/订阅是一种消息模式,这种模式旨在将消息发送者和消息接收者解耦.发送者不需要关心将消息发送给谁,接收者也不需要知道消息的发送者是谁.发送者将消息发布以后就结束动 ...
- 在线HTML文档编辑器使用入门之图片上传与图片管理的实现
在线HTML文档编辑器使用入门之图片上传与图片管理的实现: 官方网址: http://kindeditor.net/demo.php 开发步骤: 1.开发中只需要导入选中的文件(通常在 webapp ...
- Java基础(九)多线程
一.线程和进程 进程(Process): 1.是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础. 2.在早期面向进程设计的计算机结构中,进程是程 ...