社区
工具平台和程序库
帖子详情
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)语句时总发生内存错误?
...全文
66
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
》
在本篇当中我们将学习STL中的
list
,在此
list
就是我们之前在数据结构学习过的链表,在本篇中我们要来了解
list
当中的成员函数该如何使用,由于
list
各个函数的接口和之前学习过的vector类型,因此在学习
list
的使用就较为轻松。在lis篇章中我们要重点了解的是在下
一个
篇章当中的
list
模拟实现中的迭代器实现,由于
list
底层的物理空间不一定是连续的,因此
list
迭代器的实现相比之前学习过的容器就复杂多了,在下一篇中将带来细致的讲解。在此之前我们先来了解
list
该如何使用吧!
【C++】
list
基本接口+手撕
list
(详解迭代器)
本篇难点在于手撕
list
,以及迭代器的理解,希望可以给大家带来帮助!
Redis中
List
篇 ~ 通俗易懂版!!
队列(先进先出):RPUSH 入队,LPOP 出队(非阻塞)或 BRPOP 出队(阻塞)。栈(先进后出):LPUSH 入栈,LPOP 出栈。最新消息列表:RPUSH 插入消息,LTRIM 限制长度,LRANGE 查询最新 N 条。可靠消息队列:RPUSH 生产消息,BRPOPLPUSH 消费消息,处理完成后删除备份列表元素。分页查询:LRANGE key start end 实现分页(适合小规模列表,大规模建议用 Redis 有序集合或数据库)。。
python中
list
方法与函数学习笔记总结,全面!!
list
数据类型在python非常重要,日后学习的数据结构,机器学习等方面都要用到
list
,
list
中最重要的部分之一,便是函数与方法,本文将会详细讲解
list
的函数与方法,相信你一定可以有所收获。
c++函数如何返回
一个
vector_小
问题
:如何返回
一个
List
中某元素的索引?
(给Python开发者加星标,提升Python技能)综合整理:Python开发者
问题
:假设有
一个
列表["年薪10万", "年薪30万", "年薪50万","年薪100万"],我想得到元素"年薪100万"的索引(即3),要怎么做?可能最先想到的是对列表进行遍历,对吧?其实有个很简单的方式,就是使用
List
的index函数!简洁的解决方法:["年薪10万", "年薪30万", "年薪50万"...
工具平台和程序库
24,850
社区成员
27,330
社区内容
发帖
与我相关
我的任务
工具平台和程序库
C/C++ 工具平台和程序库
复制链接
扫一扫
分享
社区描述
C/C++ 工具平台和程序库
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章