2016-09-21 111 views
1

編輯:這被標記爲重複的問題,但問題鏈接不是我問的。我知道如何將一個結構數組傳遞給一個函數。我正在尋求如何將成員數據從該數組中的元素傳遞給函數的幫助。如何將結構數組中的成員數據傳遞給函數?

我有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://stackoverflow.com/questions/14418595/c-method-for-iterating-through-a-structs-members-like-an-array – MayeulC

+0

正確。我的措辭不是很好,但我試圖訪問排序功能中的結構域,我不知道如何去做。 – Austin

回答

0

否您不能編寫一個用於排序的通用函數,您需要爲每個字段設置比較函數,或者您需要通過發送多一個參數來跟蹤要排序的成員,並在排序後執行檢查爲哪個標籤比較哪個字段然後交換。

對每個字段使用比較函數進行排序的最佳方法。

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

,然後使用#include <algorithm>

sort(studentarr, startoffset, endoffset, compareCurrentGrade); 

定義的排序功能,更多地瞭解排序See

如果你不想使用外部排序libray模塊,那麼你就寫 每場的排序功能。

相關問題