编程论坛's Archiver

yijing21 发表于 2008-4-18 22:05

编译通过。运行错误 谁帮忙看下

void Information::Erase()
{
        cout<<"请输入要删除的学号:";
        string str;
        cin>>str;
        list<student> ivec;
        ifstream in;
        in.open("stu.txt",ios::in);
        while(in)
        {
                student stu;
                in>>stu.num>>stu.name>>stu.score[0]>>stu.score[1]>>stu.score[2];
                ivec.push_back(stu);
        }
       
        for(list<student>::iterator it=ivec.begin();it!=ivec.end();++it)//不知道是不是这段出了问题
                if(it->num==str)
                        ivec.erase(it);
       
        ofstream out;
        out.open("stu.txt",ios::out);
        for(list<student>::iterator y=ivec.begin();y!=ivec.end();++y)
        {
                out<<y->num<<"\t";
                out<<y->name<<"\t";
                out<<y->score[0]<<"\t";
                out<<y->score[1]<<"\t";
                out<<y->score[2]<<"\t";
        }

}


这是类Information的一个删除函数  先从文件读入数据  然后删除开始处制定的学号的数据  再存回文件  运行时出错  但是不知道是哪里错了  请大家指教

yeyuanzhi 发表于 2008-4-19 09:05

回复 1# 的帖子

for(list<student>::iterator it=ivec.begin();it!=ivec.end();++it)//不知道是不是这段出了问题
        if(it->num==str)
            ivec.erase(it);

应该是迭代器失效的问题。

yijing21 发表于 2008-4-19 09:18

恩 之前我也觉得是这里问题  刚又仔细看了下  问题应该是在for的最后一个it上  删除了指定元素之后 再执行for表达式3时  it已经失效

页: [1]

Powered by Discuz! Archiver 6.1.0  © 2001-2007 Comsenz Inc.