如何将结构数组中的成员数据传递给函数?

问题描述:

编辑:这被标记为重复的问题,但问题链接不是我问的。我知道如何将一个结构数组传递给一个函数。我正在寻求如何将成员数据从该数组中的元素传递给函数的帮助。如何将结构数组中的成员数据传递给函数?

我有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; 
      } 
     } 
    } 
} 

但传递构件数据作为arguement,即IDNumber中,为了避免编写一个排序函数为每个单独的成员变量?

+1

这似乎不是重复的,但也许问题的措辞可能不同。我认为这里的OP想要根据函数中的参数访问结构的某些字段。数组传递已经解决了。 – MayeulC

+0

请看https://*.com/questions/14418595/c-method-for-iterating-through-a-structs-members-like-an-array – MayeulC

+0

正确。我的措辞不是很好,但我试图访问排序功能中的结构域,我不知道如何去做。 – Austin

否您不能编写一个用于排序的通用函数,您需要为每个字段设置比较函数,或者您需要通过发送多一个参数来跟踪要排序的成员,并在排序后执行检查为哪个标签比较哪个字段然后交换。

对每个字段使用比较函数进行排序的最佳方法。

bool compareCurrentGrade (const Student & a, const Student & b) { 
    return a.currentGrade < b.currentGrade; 
} 

,然后使用#include <algorithm>

sort(studentarr, startoffset, endoffset, compareCurrentGrade); 

定义的排序功能,更多地了解排序See

如果你不想使用外部排序libray模块,那么你就写 每场的排序功能。