编译通过。运行错误 谁帮忙看下
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的一个删除函数 先从文件读入数据 然后删除开始处制定的学号的数据 再存回文件 运行时出错 但是不知道是哪里错了 请大家指教
回复 1# 的帖子
for(list<student>::iterator it=ivec.begin();it!=ivec.end();++it)//不知道是不是这段出了问题if(it->num==str)
ivec.erase(it);
应该是迭代器失效的问题。 恩 之前我也觉得是这里问题 刚又仔细看了下 问题应该是在for的最后一个it上 删除了指定元素之后 再执行for表达式3时 it已经失效
页:
[1]
