问题求助:C++中vector向量元素的排序,调试出错
是这样的,自学C++看到有个信息管理系统的题目,就想学着做做。目前都很顺利。唯一一项还没实现的功能就是排序了。
程序的基本架构是:Student类的成员有“成绩”和“排名”等。我定义了一个vector容器存这些对象。通过比较这些对象的“成绩”将这些对象重新排名,然后写入每个对象的排名。
这个程序支持添加新的对象。新的对象用push_back()函数实现。push_back并完成对象的初始化后,程序就会调用排名函数。问题是,现在这个排名函数总是出错。里面的代码用到数组里没问题,但是用到vector里就提示出错。麻烦大家帮我看看这是怎么回事啊。提示的错误是vector subscript out of range。
程序如下:
程序的基本架构是: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);
}
}
}
...全文
相关推荐
利用C++向量的简单排序
利用Vector的排序,输入以一个负数结束。
std::vector排序详解
一个详细全面的关于vector排序的例子。 涉及到 如何继承std::binary_function、如何重载operator().
C++中vector容器的用法
在c++中,vector是一个十分有用的容器,下面对这个容器做一下总结。 1 基本操作 (1)头文件#include<vector>. (2)创建vector对象,vector<int> vec; (3)尾部插入数字:vec.push_back(a); (4)使用下标访问元素,cout<<vec>::iterator it; for(it=vec.begin();it!=vec.end();it++) cout<<*it<<endl; (6)插入元素: vec.insert(vec.begin()+i
C++中vector可以作为map的键值实例代码
主要介绍了C++中vector可以作为map的键值实例代码,需要的朋友可以参考下
vector 排序
C++中当 vector 中的数据类型为基本类型时我们调用std::sort函数很容易实现 vector中数据成员的升序和降序排序,然而当vector中的数据类型为自定义结构体类型时,我们该怎样实现升序与降序排列呢?有两种方法,下面的例子能很好的说明


