[英]How do I pass member data from an array of a structure into a function?
编辑:这被标记为重复的问题,但链接的问题不是我要求的。 我知道如何将结构数组传递给函数。 我正在寻求有关如何将成员数据从该数组中的元素传递给函数的帮助。
我在C ++中有一个家庭作业,我的任务是创建一个跟踪学生信息的结构:
struct Student {
string name;
double idNumber;
double currentGrade;
double lastGrade;
double overallGPA;
};
提示用户输入他们将输入数据的学生数量,为此创建基于此输入的结构数组。 然后程序遍历每个元素,提示用户输入结构的每个实例的成员数据。
输入所有数据后,我的任务是根据用户选择的成员变量对数组进行排序。 我已经编写了按名称变量排序的排序函数,我已经编写了一个基于双变量对数组进行排序的通用函数,但我不确定如何只对所有四个双变量使用一个函数。
从本质上讲,有没有办法可以使用这个功能:
void doubleSort(Student arr[], int arrSize) {
// bubble sort: high -> low
Student temp;
for(int i = 0; i < arrSize; i++) {
for(int j = 0; j < arrSize; j++) {
if(arr[j] < arr[i]) {
// swap values
temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
}
}
但是将成员数据作为争论传递,即idNumber,以避免为每个成员变量编写排序函数?
否您不能为排序编写单个通用函数,您需要为每个字段设置比较函数,或者您需要通过再发送一个参数来跟踪要排序的成员,并在内部排序中检查哪个标记要比较的字段然后交换。
排序为每个字段使用比较函数的最佳方法。
bool compareCurrentGrade (const Student & a, const Student & b) {
return a.currentGrade < b.currentGrade;
}
然后使用#include <algorithm>
定义的sort函数
sort(studentarr, startoffset, endoffset, compareCurrentGrade);
了解有关排序的更多信息
如果您不想使用外部排序libray模块,则必须为每个字段编写排序函数。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.