C++ 小问题
// 这个程序到了按名字移除那里时崩溃了,具体原因不知道,为什么会这样呢?
#include<iostream>
#include<string>
#include<vector>
using namespace std;
class Student {
public:
string name_;
int id_;
static int count;
public:
Student (string name,int id) {
id_ = id;
name_ = name;
count++;
}
};
int Student::count = 0;
class Group {
private:
string name_;
public:
std::vector<Student*> vec;
Group (string name) {
name_ = name;
}
void AddStudent (Student* stu) {
if(vec.size() == 0 ) {
vec.push_back(stu);
}
else {
bool flag = true;
for (vector<Student*>::size_type ix = 0; ix< vec.size();ix++) {
if(vec[ix] == stu ) {
flag = false;
break;
}
}
if(flag == true) vec.push_back(stu);
}
}
string GetGroupName () {
return name_;
}
int GetNumberOfStudents () {
return vec.size();
}
void RemoveStudentById (int id) {
for(vector<Student*>::iterator it = vec.begin(); it != vec.end() ;it++)
if((*it)->id_ == id) vec.erase(it);
}
void RemoveStudentByName (string name) {
for(vector<Student*>::iterator it = vec.begin(); it != vec.end() ;it++)
if((*it)->name_ == name) vec.erase(it);
}
};
int main(int argc, char *argv[]) {
Student A("a", 1);
Student B("b", 2);
Student C("c", 3);
Student D("a", 4);
Group group("basketball");
group.AddStudent(&A);
group.AddStudent(&A);
group.AddStudent(&B);
group.AddStudent(&C);
group.AddStudent(&D);
group.RemoveStudentByName("a");
std::cout << "The number of students in group("
<< group.GetGroupName() + "): "
<< group.GetNumberOfStudents() << std::endl;
getchar();
return 0;
}
C++
[解决办法]
迭代器失效造成的,试试下面的。
for(vector<Student*>::iterator it = vec.begin(); it != vec.end() ;)
if((*it)->name_ == name) it = vec.erase(it);
else ++it;
vec.erase(std::remove_if(vec.begin(),vec.end(),
[&](Student const*s){return s->name_==name;}),
vec.end());