我有以下功能,它采用学生的矢量(具有姓名和注册号),然后计算这些学生的最小,最大和平均标记(他们的标记存储在地图中),输出部分正确,它应该只打印每个学生一次,但是我写的代码打印出每个学生与他们的向量中存储的标记数量相同的次数。我花了一些时间来解决这个问题,我相信问题是我的第三个循环,有人可以解释为什么它会像这样循环以及如何解决它。谢谢。
string func1(vector<Student>students, float mark) {
int count = 0;
float avg, min, max = 0;
list<string> toPrint;
map<string, float> temp;
vector<float> v;
//for every student
for(size_t a=0; a < students.size(); ++a) {
temp = students[a].getCopyOfMap();
v.erase(v.begin(), v.end());
avg = 0;
min = 0;
max = 0;
count = 0;
for(map<string, float>::iterator it = temp.begin(); it != temp.end(); ++it) {
stringstream ss;
ss << it->second;
v.push_back(stof(ss.str()));
}
for(map<string, float>::iterator it = temp.begin(); it != temp.end(); ++it) {
max = *max_element(v.begin(), v.end());
min = *min_element(v.begin(), v.end());
for (size_t b=0; b < v.size(); ++b) {
avg = avg + v[b];
count++;
}
avg = avg/count;
if(avg > mark) {
stringstream out;
out << students[a].getRegNo() << " " << min << " " << max << " " << avg << endl;
toPrint.push_back(out.str());
}
}
}
答案 0 :(得分:1)
你的'if'陈述应该在你的第三个'for'之外,但仍然在第一个'for'之内。