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

hlyces 2011-12-02 06:19:37
	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);

}
...全文
109 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
qscool1987 2011-12-02
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 pathuang68 的回复:]
erase后迭代器会失效。

下面是删除list中一个元素的定式,供参考:

C/C++ code

for (list<int>::iterator it = lst.begin();it!=lst.end();/*++it*/)
{
if(删除元素的条件满足)
{
it = lst.erase……
[/Quote]这个可以,或者如下:
#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;
}
pathuang68 2011-12-02
  • 打赏
  • 举报
回复
erase后迭代器会失效。

下面是删除list中一个元素的定式,供参考:

for (list<int>::iterator it = lst.begin();it!=lst.end();/*++it*/)
{
if(删除元素的条件满足)
{
it = lst.erase(it);
}
else
{
++it;
}
}
nuaazdh 2011-12-02
  • 打赏
  • 举报
回复
第二种情况, it = lst.erase(it);后it++越界了。
nuaazdh 2011-12-02
  • 打赏
  • 举报
回复
注意list<int>::iterator it,迭代器变量it不能为负值,你 it = lst.begin(),再--it,it为负值,出现异常。
qq120848369 2011-12-02
  • 打赏
  • 举报
回复
都错了。
無_1024 2011-12-02
  • 打赏
  • 举报
回复
erase会使得迭代器失效的
hlyces 2011-12-02
  • 打赏
  • 举报
回复
	list<int> lst;
lst.push_back(1);

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

it = lst.erase(it);

}
这两种会有问题么?

64,654

社区成员

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

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