为何用list类的size()做for循环的上限,删不净表中的元素

YUSHUIHE 2015-09-30 05:09:02
#include<iostream>
#include<list>
using namespace std;
int main()
{
list<char> chList;
chList.push_front('t');
chList.push_front('a');
chList.push_back('j');
chList.push_front('i');
list<char>::iterator iter=chList.begin();
cout<<"chList表中元素个数="<<chList.size()<<endl;
for(int i=0;i<chList.size();i++) //用size()做循环上限,只删除表中前2个元素。若将size()换成4,可全部删除
//while(!chList.empty()) //用此循环也可全部删除表中元素
{
chList.pop_front();
}
cout<<"chList为空?"<<chList.empty()<<chList.size()<<endl;
for(iter=chList.begin();iter!=chList.end();iter++)
cout<<*iter<<" ";
cout<<endl;
return 0;
}
请高师指教。
...全文
138 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
YUSHUIHE 2015-09-30
  • 打赏
  • 举报
回复
噢,明白了,size()是随之变化的,所以,对于删除操作是不可直接用的。谢谢2、3、4楼老师指点迷津。
song_cai_csdn 2015-09-30
  • 打赏
  • 举报
回复
删除之后,size()会随之变化。删除两个之后,size()==2,此时i==2,循环退出
jiht594 2015-09-30
  • 打赏
  • 举报
回复
size_t er = chList.size(); for(int i=0; i<er; i++)
mymtom 2015-09-30
  • 打赏
  • 举报
回复

#include<iostream>
#include<list>
using namespace std;
int main(void)
{
    list<char> chList;
    chList.push_front('t');
    chList.push_front('a');
    chList.push_back('j');
    chList.push_front('i');
    list<char>::iterator iter=chList.begin();
    cout<<"chList表中元素个数="<<chList.size()<<endl;
    size_t size = chList.size();
    for(size_t i=0;i<size;i++)  //用size()做循环上限,只删除表中前2个元素。若将size()换成4,可全部删除
                             // 每个循环 size() 都会减一,i 会加1,所以只能删除一半的元素
    // while(chList.size() != 0) // 这样也是可以的, 相当于!chList.empty()
    //while(!chList.empty())  //用此循环也可全部删除表中元素
    {
    chList.pop_front();
    }
    cout<<"chList为空?"<<chList.empty() <<","<<chList.size()<<endl;
    for(iter=chList.begin();iter!=chList.end();iter++)
    cout<<*iter<<" ";
    cout<<endl;
    return 0;
}
YUSHUIHE 2015-09-30
  • 打赏
  • 举报
回复
补充:用cout输出显示size(),等于4,是正确的,但用在for循环中,就不正常循环了,难道size()的值不能用于for循环?

64,648

社区成员

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

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