社区
工具平台和程序库
帖子详情
list的一个问题,请教!!
yanyanem
2003-02-13 05:04:51
删除list<int>ilist中的所有奇数元素,程序如下:
int ia[]={0,1,2,3,4,5,6,7,8,9};
list<int >ilist(ia,ia+10);
list<int>::iterator it=ilist.begin();
while(it!=ilist.end())
{
if ((*it)%2!=0)
ilist.erase(it);
it++;
}
为什么每次执行if ((*it)%2!=0)语句时总发生内存错误?
...全文
57
8
打赏
收藏
list的一个问题,请教!!
删除listilist中的所有奇数元素,程序如下: int ia[]={0,1,2,3,4,5,6,7,8,9}; listilist(ia,ia+10); list::iterator it=ilist.begin(); while(it!=ilist.end()) { if ((*it)%2!=0) ilist.erase(it); it++; } 为什么每次执行if ((*it)%2!=0)语句时总发生内存错误?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
8 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
fangrk
2003-02-14
打赏
举报
回复
int ia[]={0,1,2,3,4,5,6,7,8,9};
list<int >ilist(ia,ia+10);
list<int>::iterator it=ilist.begin();
while(it!=ilist.end())
{
if ((*it)%2!=0)
ilist.erase(it++);
else ++it;
}
这个问题在Herb Sutter的More Exceptional C++的条款9有。
allen1981813
2003-02-13
打赏
举报
回复
void main(){
int ia[]={0,1,2,3,4,5,6,7,8,9};
list<int> ilist(ia,ia+9);
for(list<int>::iterator it=ilist.begin(); it!=ilist.end();){
if ((*it)%2)
it=ilist.erase(it);
else
it++;
}
}
小笨和漂向北方
2003-02-13
打赏
举报
回复
还是chianjiji说的对,
我也是这个意思,只是不知道如何处理这个iterator(对STL不熟),因此支的歪招,见笑:)
你可以结帐了!
chinajiji
2003-02-13
打赏
举报
回复
//关键是你没有处理好边删除,边遍历的关系,致使list混乱;这个错误很容易出现的.
//改正如下:
#include <iostream>
#include <stdlib.h>
#include <list>
using namespace std;
int main(int argc, char *argv[])
{
int ia[]={0,1,2,3,4,5,6,7,8,9};
list<int>ilist(ia,ia+10);
list<int>::iterator it=ilist.begin();
int i = 0;
while(it != ilist.end())
{
if ((*it)%2!=0) {
cout << *it << endl;
it = ilist.erase(it);//这一句是关键,ilist.erase(it)
//删除it指向的元素,并返回指向下一个元素的it;
}
else
it++;
}
system("PAUSE");
return 0;
}
hellwolf
2003-02-13
打赏
举报
回复
刚刚写错了:
#include <list>
#include <iterator>
#include <algorithm>
#include <iostream>
using namespace std;
int main(){
int ia[]={0,1,2,3,4,5,6,7,8,9};
list<int>ilist(ia,ia+10);
list<int>::iterator it=ilist.begin();
list<int>::iterator tmp = it;
while(it!=ilist.end())
{
tmp++;
if ((*it)%2!=0)
ilist.erase(it);
it = tmp;
}
copy(ilist.begin(),ilist.end(),ostream_iterator<int>(cout," "));
system("pause");
}
hellwolf
2003-02-13
打赏
举报
回复
你把it删掉了,it就失效了
it++没有定义的错误
tmp=it
ilist.erase(tmp);
it++
yanyanem
2003-02-13
打赏
举报
回复
to 小笨
还是一样出错!
小笨和漂向北方
2003-02-13
打赏
举报
回复
int ia[]={0,1,2,3,4,5,6,7,8,9};
list<int >ilist(ia,ia+10);
list<int>::iterator it=ilist.begin();
while(it!=ilist.end())
{
list<int>::iterator itptr=0;
itptr=it;
if ((*itptr)%2!=0)
ilist.erase(itptr);
it++;
}
C++《
list
》
本文主要介绍C++ STL中
list
的使用,包括构造函数、析构函数、赋值运算符重载等。还讲解了容量操作、迭代器、范围for、元素修改操作等内容,对比了
list
与其他容器的差异,如迭代器实现更复杂,部分操作效率不同,最后提到后续将进行
list
的模拟实现。
【C++】
list
基本接口+手撕
list
(详解迭代器)
本文围绕C++的
list
容器展开,介绍了其常用接口,包括构造、增删查改等操作,分析了排序性能。重点讲解了
list
迭代器的实现,涉及分类、失效
问题
、源码模板等,还介绍了手撕迭代器的方法。此外,阐述了
list
的构造和赋值重载,对比了
list
和vector,并给出源码合集。
Redis中
List
篇 ~ 通俗易懂版!!
本文系统介绍了Redis
List
的基本操作与进阶命令,涵盖LPUSH、RPUSH、LPOP、RPOP等增删改查指令,并深入讲解BLPOP、BRPOPLPUSH、LTRIM等高阶功能。重点分析其在消息队列、栈、最新记录列表等场景的应用,同时提醒控制列表长度、避免高频索引访问等性能注意事项,帮助开发者高效利用Redis
List
。
python中
list
方法与函数学习笔记总结,全面!!
本文详细介绍了Python中列表(
list
)的基础函数与常用方法,包括添加、删除元素的操作及排序统计功能,适合初学者快速掌握列表的基本用法。
c++函数如何返回
一个
vector_小
问题
:如何返回
一个
List
中某元素的索引?
本文介绍如何使用Python的
list
.index()方法快速查找列表元素的索引,并探讨该方法的高级用法及其局限性。
工具平台和程序库
24,851
社区成员
27,330
社区内容
发帖
与我相关
我的任务
工具平台和程序库
C/C++ 工具平台和程序库
复制链接
扫一扫
分享
社区描述
C/C++ 工具平台和程序库
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章