c++容器问题
如题:将一组班级和年级的组合逐个分类,并且存储到不同容器中去我写了如下的代码:
#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;
}
人造人 发表于 2019-7-5 12:27
我只添加了1行代码,第72行
ok,多谢了
页:
[1]