问题求助:C++中vector向量元素的排序,调试出错

u010607079 u010607079 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
是这样的,自学C++看到有个信息管理系统的题目,就想学着做做。目前都很顺利。唯一一项还没实现的功能就是排序了。

程序的基本架构是:Student类的成员有“成绩”和“排名”等。我定义了一个vector容器存这些对象。通过比较这些对象的“成绩”将这些对象重新排名,然后写入每个对象的排名。

这个程序支持添加新的对象。新的对象用push_back()函数实现。push_back并完成对象的初始化后,程序就会调用排名函数。问题是,现在这个排名函数总是出错。里面的代码用到数组里没问题,但是用到vector里就提示出错。麻烦大家帮我看看这是怎么回事啊。提示的错误是vector subscript out of range。

程序如下:
void RankByGrade()
{
using namespace studentInformation;
using namespace std;
int flagCompareOut=0; //循环变量
int flagCompareIn=0; //循环变量
int rankVectorSize;
rankVectorSize = studentVector.size(); //容器的名字叫studentVector
if (rankVectorSize == 0)
{
cout << "---------------------------------" << endl
<< "系统当前没有学生信息!" << endl
<< "---------------------------------" << endl;
}
else if (rankVectorSize == 1)
{
studentVector[flagCompareOut].Student_WriteGradeRank(flagCompareOut + 1);
}
else //用了冒泡排序
{
int flagCompareOut = 0;
int flagCompareIn = 0;
for (flagCompareOut = 0; flagCompareOut < rankVectorSize - 1; flagCompareOut++)
{
for (flagCompareIn = 0; flagCompareIn < rankVectorSize - flagCompareOut - 1; flagCompareIn++)
{

if (studentVector[flagCompareIn].Student_ReadGrade() < studentVector[flagCompareIn + 1].Student_ReadGrade()) //如果前一个元素的成绩比后一个的成绩低,就交换位置。
{
Student studentTemp;
studentTemp = studentVector[flagCompareIn];
studentVector[flagCompareIn] = studentVector[flagCompareIn + 1];
studentVector[flagCompareIn + 1] = studentTemp;
}
} //排序完成
}
int i = 0;
for (i = 0; i < rankVectorSize; i++) //输出成绩。若后一个的成绩和前一个的一样,则两人的排名一样
{
if ((i>0)&(studentVector[i].Student_ReadGrade() == studentVector[i - 1].Student_ReadGrade()))
studentVector[i].Student_WriteGradeRank(studentVector[i - 1].Student_ReadGradeRank());
else
studentVector[i].Student_WriteGradeRank(i + 1);
}
}
}

...全文

相关推荐

评论 5
收藏 已收藏
分享
返回顶部
u010607079
C++ 语言 65,214 成员 250,514 内容