vector之erase和迭代器
C++开发中使用vector时非常方便的,但是也是需要非常小心的,最近在使用容器删除某个元素的时候,测试结果出现了异常
/* vector erase test*/
int testVector()
{
vector<int> intVec;
/* init vector */
for(int i = 0; i < 10; ++i) {
intVec.push_back(i);
}
/* erase element */
for(auto i = intVec.begin(); i != intVec.end(); ++i) {
if (*i % 2) {
intVec.erase(i);
}
}
}
大致意思是使用迭代器遍历vector,删除其中的奇数元素,测试结果出现异常。
因为使用erase会破坏迭代器
应该改为如下循环
/* vector erase test*/
int testVector()
{
vector<int> intVec;
/* init vector */
for(int i = 0; i < 10; ++i) {
intVec.push_back(i);
}
/* erase element */
for(auto i = intVec.begin(); i != intVec.end(); /*do nothing*/) {
if (*i % 2) {
i = intVec.erase(i);
}
else {
++i;
}
}
}
vector之erase和迭代器的更多相关文章
- map 和 vector 的erase函数说明
1. map的erase函数使用 这里首先要注意,C++针对map的erase函数有不同的函数原型,这往往是出现问题的关键所在.根据参考文献1: 在C++98中: (1) void erase (it ...
- 【转】vector中erase()的使用注意事项
vector::erase():从指定容器删除指定位置的元素或某段范围内的元素 vector::erase()方法有两种重载形式 如下: iterator erase( iterator _Whe ...
- 关于vector的erase删除操作的两种不同方法,在linux与visual studio的实现讨论
关于vector的erase删除操作的两种不同方法,在linux与visual studio的实现讨论 1.前言: 最近在做某一个题时,用到了vector的删除操作,利用的是erase()函数删除符合 ...
- BZOJ 2878([Noi2012]-失落的游乐园树DP+出站年轮加+后市展望DP+vector的erase)
2878: [Noi2012]迷失乐园 Time Limit: 10 Sec Memory Limit: 512 MBSec Special Judge Submit: 319 Solved: ...
- STL的erase()陷阱-迭代器失效总结
下面材料整理自Internet&著作. STL中的容器按存储方式分为两类,一类是按以数组形式存储的容器(如:vector .deque):另一类是以不连续的节点形式存储的容器(如:list.s ...
- vector详讲(二)迭代器
先看一下代码: #include <iostream> #include <vector> int main() { std::vector<double> dou ...
- 【转载】STL 的 erase() 陷阱-迭代器失效总结
下面材料整理自Internet&著作. TL中的容器按存储方式分为两类,一类是按以数组形式存储的容器(如:vector .deque):另一类是以不连续的节点形式存储的容器(如:list.se ...
- vector的erase的用法
vector<string>::iterator it = v.erase(v.begin() + 3, v.begin() + 6); 可以直接从begin进行加减,比如我们要移除第3个 ...
- 关于Vector,map等迭代器问题
vector.erase(it):后,it自动++,一定要弄清楚,删除成功后it指向删除的下一个地址. 对于map.erase(it),返回值为NULL,而Vector是返回itorator
随机推荐
- [AtcoderABC200E]Patisserie
[AtcoderABC200E]Patisserie 题面翻译 对于一个三元组\((i,j,k)\) 我们对它按如下要求进行升序排序: 第一关键词 \(i + j + k\) 即三者总和 第二关键词 ...
- PTA——c++2017Final 圆周率山
为了参加学校的社团风采展,怡山小学数学组的同学们决定画一座圆周率山,以宣传圆周率. 已知圆周率为:3. 1415926535 8979323846 2643383279 5028841971 6939 ...
- 1.26学习总结——css盒子模型
CSS 盒子模型(Box Model) 所有HTML元素可以看作盒子,在CSS中,"box model"这一术语是用来设计和布局时使用. CSS盒模型本质上是一个盒子,封装周围的H ...
- symfony的几个请求变量和方法
请求变量 // 全部变量 $request->query->all(); // 指定变量 $request->query->get('abc'); 请求方式 $request- ...
- CI框架页面打开空白,无报错为解决方法新环境
1.打开错误显示,可以在控制controllers的首页入口加入以下代码,查看错误 error_reporting(-1); ini_set('display_errors', 1); //插入显示所 ...
- google插件网页播放mp4代码
<script src="http://html5media.googlecode.com/svn/trunk/src/html5media.min.js"></ ...
- Java对象构造
关于对象构造的一些认识. 默认域初始化 如果在构造器中没有显示地给域赋予初值,那么就会被自动地赋予默认值:数值为0,布尔值为false,对象引用为null.然而,这显然是不安全的,在一个null引用上 ...
- P3190-[HNOI2007]神奇游乐园【插头dp】
正题 题目链接:https://www.luogu.com.cn/problem/P3190 题目大意 \(n*m\)的网格上有权值,求一条权值和最大的不交回路. \(1\leq n\leq 100, ...
- FastAPI(38)- 模拟一个跨域场景
同源策略 https://www.cnblogs.com/poloyy/p/15345184.html CORS https://www.cnblogs.com/poloyy/p/15345871.h ...
- 现在有一个长度20的SET,其中每个对象的内容是随机生成的字符串,请写出遍历删除LIST里面字符串含"2"的对象的代码。
现在有一个长度20的SET,其中每个对象的内容是随机生成的字符串,请写出遍历删除LIST里面字符串含"2"的对象的代码. public class RemoveTwo { //le ...