|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
如题:将一组班级和年级的组合逐个分类,并且存储到不同容器中去
我写了如下的代码:
- #include<iostream>
- #include<vector>
- using namespace std;
- //班级类
- class Class
- {
- private:
- int number_class; //班级编号
- int number_grade; //年级
- public:
- Class(int num_cla = 0, int num_gra = 0)
- {
- number_class = num_cla;
- number_grade = num_gra;
- }
- int Get_Class() { return number_class; } //返回班级
- int Get_Grade() { return number_grade; } //返回年级
- };
- //年级类
- class Grade
- {
- private:
- int grade; //年级编号
- vector<Class> clas;
- public:
- Grade(int gr = 0) { grade = gr; }
- void Set_Grade(int gra) { grade = gra; } //设置班级名字
- void Display_Class_Mates() //输出班级成员
- {
- vector<Class>::iterator ptr = clas.begin();
- for (ptr; ptr != clas.end(); ptr++)
- cout << "class: " << (*ptr).Get_Class()
- << " grade: " << (*ptr).Get_Grade() << endl;
- }
- int Get_Grade() { return grade; }
- vector<Class>& Get_Class() { return clas; }
- };
- //分类函数
- void Classify(vector<Class>& cla, vector<Grade>& gra)
- {
- vector<Class>::iterator p_class; //班级迭代器
- vector<Grade>::iterator p_grade; //年级迭代器
- Class c; //班级对象
- Grade g; //年级对象
- for (p_class = cla.begin(); p_class != cla.end(); p_class++)
- {
- for (p_grade = gra.begin(); p_grade != gra.end(); p_grade++)
- {
- if ((*p_grade).Get_Grade() == (*p_class).Get_Grade()) //如果年级容器中存在这个年级
- {
- auto ptr = (*p_grade).Get_Class().begin();
- for (ptr; ptr != (*p_grade).Get_Class().end(); ptr++) //在该年级容器中的班级容器循环
- {
- if ((*ptr).Get_Class() == (*p_class).Get_Class()) //如果该年级容器中的班级容器有这个班级
- {
- break;
- }
- }
- if (ptr == (*p_grade).Get_Class().end()) //如果在该年级容器中的班级容器没有这个班级
- {
- (*p_grade).Get_Class().push_back((*p_class));
- }
- break;
- }
- }
- if (p_grade == gra.end()) //如果年级容器中不存在这个年级
- {
- g.Set_Grade((*p_class).Get_Grade());
- g.Get_Class().push_back(*p_class);
- gra.push_back(g);
- }
- }
- }
- int main()
- {
- vector<Class> clas{
- Class(1,2018),
- Class(3,2019),
- Class(2,2018),
- Class(2,2018),
- Class(4,2019) };
- vector<Grade> grade;
- Classify(clas, grade);
- auto ptr = grade.begin();
- for (ptr; ptr != grade.end(); ptr++) {
- cout << "grade: " << (*ptr).Get_Grade() << endl;
- (*ptr).Display_Class_Mates();
- }
- return 0;
- }
复制代码
有一个奇怪的问题,最后输出时2019级怎么多了个2018级的,找了半天也找不到原因
有没有大佬帮我看一看,这是什么问题
我只添加了1行代码,第72行
- #include<iostream>
- #include<vector>
- using namespace std;
- //班级类
- class Class
- {
- private:
- int number_class; //班级编号
- int number_grade; //年级
- public:
- Class(int num_cla = 0, int num_gra = 0)
- {
- number_class = num_cla;
- number_grade = num_gra;
- }
- int Get_Class() { return number_class; } //返回班级
- int Get_Grade() { return number_grade; } //返回年级
- };
- //年级类
- class Grade
- {
- private:
- int grade; //年级编号
- vector<Class> clas;
- public:
- Grade(int gr = 0) { grade = gr; }
- void Set_Grade(int gra) { grade = gra; } //设置班级名字
- void Display_Class_Mates() //输出班级成员
- {
- vector<Class>::iterator ptr = clas.begin();
- for (ptr; ptr != clas.end(); ptr++)
- cout << "class: " << (*ptr).Get_Class()
- << " grade: " << (*ptr).Get_Grade() << endl;
- }
- int Get_Grade() { return grade; }
- vector<Class>& Get_Class() { return clas; }
- };
- //分类函数
- void Classify(vector<Class>& cla, vector<Grade>& gra)
- {
- vector<Class>::iterator p_class; //班级迭代器
- vector<Grade>::iterator p_grade; //年级迭代器
- Class c; //班级对象
- Grade g; //年级对象
- for (p_class = cla.begin(); p_class != cla.end(); p_class++)
- {
- for (p_grade = gra.begin(); p_grade != gra.end(); p_grade++)
- {
- if ((*p_grade).Get_Grade() == (*p_class).Get_Grade()) //如果年级容器中存在这个年级
- {
- auto ptr = (*p_grade).Get_Class().begin();
- for (ptr; ptr != (*p_grade).Get_Class().end(); ptr++) //在该年级容器中的班级容器循环
- {
- if ((*ptr).Get_Class() == (*p_class).Get_Class()) //如果该年级容器中的班级容器有这个班级
- {
- break;
- }
- }
- if (ptr == (*p_grade).Get_Class().end()) //如果在该年级容器中的班级容器没有这个班级
- {
- (*p_grade).Get_Class().push_back((*p_class));
- }
- break;
- }
- }
- if (p_grade == gra.end()) //如果年级容器中不存在这个年级
- {
- g.Get_Class().clear();
- g.Set_Grade((*p_class).Get_Grade());
- g.Get_Class().push_back(*p_class);
- gra.push_back(g);
- }
- }
- }
- int main()
- {
- vector<Class> clas{
- Class(1,2018),
- Class(3,2019),
- Class(2,2018),
- Class(2,2018),
- Class(4,2019) };
- vector<Grade> grade;
- Classify(clas, grade);
- auto ptr = grade.begin();
- for (ptr; ptr != grade.end(); ptr++) {
- cout << "grade: " << (*ptr).Get_Grade() << endl;
- (*ptr).Display_Class_Mates();
- }
- return 0;
- }
复制代码
|
|