list 的问题,求.........

hlyces 2011-12-02 06:18:51
	list<int> lst;
lst.push_back(1);

for (list<int>::iterator it = lst.begin();it!=lst.end();++it)
{
list<int>::iterator itemp = it;

--it;

lst.erase(itemp);

}
...全文
88 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
feng2008519 2011-12-05
  • 打赏
  • 举报
回复
list内部是链表的机制,如果开始指向头结点,你--操作之后他就不知道指向哪里了,然后你删掉再++他就不是指向第二个元素

++
學習。。
hlyces 2011-12-05
  • 打赏
  • 举报
回复
感谢大家~~
zzcmx2008 2011-12-02
  • 打赏
  • 举报
回复
iamnobody 2011-12-02
  • 打赏
  • 举报
回复
难道你用的是传说中的vc6.0?
怎么会不报错呢?
qscool1987 2011-12-02
  • 打赏
  • 举报
回复

#include <list>
#include <iostream>
using namespace std;
int main()
{
list<int> lst;
lst.push_back(1);
lst.push_back(1);
lst.push_back(1);
lst.push_back(1);
lst.push_back(1);
list<int>::iterator it1 = lst.begin(),
it2 = lst.end();
for (;it1 != it2;)
{
list<int>::iterator temp = it1;
it1++;
lst.erase(temp);
}
cout << lst.size() << endl;
return 0;
}

list内部是链表的机制,如果开始指向头结点,你--操作之后他就不知道指向哪里了,然后你删掉再++他就不是指向第二个元素
wintree 2011-12-02
  • 打赏
  • 举报
回复
楼主想表达什么啊?++it
——it

感觉好乱啊!
pathuang68 2011-12-02
  • 打赏
  • 举报
回复
删除元素的定式写法:

for (list<int>::iterator it = lst.begin();it!=lst.end();/*++it*/)
{
if(删除元素的条件满足)
{
it = lst.erase(it);
}
else
{
++it;
}
}
nuaazdh 2011-12-02
  • 打赏
  • 举报
回复
作为迭代器变量的it是不能为负值的,如果初始=lst.begin(),--it,就会变成负值,故出错

64,648

社区成员

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

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