C++ list iterator 的问题

zqz981 2009-02-06 04:46:42
我在写程序时遇到如下问题:
list<type*>::iterator it1, it2, it3;
list<type*>* newlist1 = getListFunction(some input);
list<type*>* newlist2 = getOtherList();
list<type*>* newlist3 = getrestList();
for(it1 = newlist1->begin(); it1!= newlist1->end(); it1++){

for(it2 = newlist2->begin(); it2!= newlist2->end(); it2++){

for(it3 = newlist3->begin(); it3!= newlist3->end(); it3++){
if((*it2)->id == (*it3->id){ //判断两个object是否是一样的
newlist1->push_back(*it2); //添加该元素到newlist1中
newlist2->remove(*it2);// 从 newlist2中删除element
}
}
}
}



为什么会出现 list iterator not dereferencable 的错误, 难道list 连接表不能动态减少或者增加吗?
...全文
1315 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
Vegertar 2009-02-06
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 zqz981 的回复:]
我当然知道从google 搜索, 但是因为不明白才发帖子问。 你给个链接算什么?不想回答可以不回答啊!
[/Quote]

你以为你是谁!
ysysbaobei 2009-02-06
  • 打赏
  • 举报
回复
帮你顶下
zqz981 2009-02-06
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 Vegertar 的回复:]
引用 2 楼 zqz981 的回复:
我当然知道从google 搜索, 但是因为不明白才发帖子问。 你给个链接算什么?不想回答可以不回答啊!


你以为你是谁!
[/Quote]
我不以为我是谁, 我不明白, 我悬赏寻求答案。 你又以为你是谁?
看看wangyi010704327, 这问题是因为 iterator 本身引起的吗! 不认真回答,又喜欢自以为是的教训别人。
你觉得是对的吗?
sagegz 2009-02-06
  • 打赏
  • 举报
回复
这样应该没问题吧,就是那里少了个右括号.

#include <list>

template<typename type>

int main(){
list <type*>::iterator it1, it2, it3;
list <type*>* newlist1 = getListFunction(some input);
list <type*>* newlist2 = getOtherList();
list <type*>* newlist3 = getrestList();
for(it1 = newlist1->begin(); it1!= newlist1->end(); it1++)
for(it2 = newlist2->begin(); it2!= newlist2->end(); it2++)
for(it3 = newlist3->begin(); it3!= newlist3->end(); it3++)
if((*it2)->id == (*it3->id)){ //这里少个右括号
newlist1->push_back(*it2); //添加该元素到newlist1中
newlist2->remove(*it2);// 从 newlist2中删除element
}
return 0;
}
zqz981 2009-02-06
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 wangyi010704327 的回复:]
for(it3 = newlist3->begin(); it3!= newlist3->end(); it3++){
if((*it2)->id == (*it3->id){ //判断两个object是否是一样的
newlist1->push_back(*it2); //添加该元素到newlist1中
newlist2->remove(*it2);// 从 newlist2中删除element
}
当newlist2->remove(*it2)执行之后,再执行if((*it2)->id == (*it3->id){ 就会出现这个错误,原因很简单,元素你已经删除了,…
[/Quote]

感谢回复!
很严重的逻辑错误亚!
wangyi010704327 2009-02-06
  • 打赏
  • 举报
回复
for(it3 = newlist3->begin(); it3!= newlist3->end(); it3++){
if((*it2)->id == (*it3->id){ //判断两个object是否是一样的
newlist1->push_back(*it2); //添加该元素到newlist1中
newlist2->remove(*it2);// 从 newlist2中删除element
}
当newlist2->remove(*it2)执行之后,再执行if((*it2)->id == (*it3->id){ 就会出现这个错误,原因很简单,元素你已经删除了,怎么还可以解引用呢?
zqz981 2009-02-06
  • 打赏
  • 举报
回复
我当然知道从google 搜索, 但是因为不明白才发帖子问。 你给个链接算什么?不想回答可以不回答啊!

65,211

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧