2017-04-12 50 views
0

我需要編寫一個程序來使用足夠大的STL向量以保存用戶定義數量的測試分數。一旦輸入了所有數字,我需要對測試分數進行平均並按升序對其進行排序。我遇到的問題是在我輸入我要輸入的分數之後,無論我輸入的是多少分數,它都只讀取第一個分數,然後將其作爲平均值,並且升序非常相似數字乘以我放在一起的多少分數。這是我迄今爲止所擁有的。感謝您的任何幫助!C++ STL Vectors

#include "stdafx.h" 
#include <iostream> 
#include <vector> 
using namespace std; 

float Average (vector<int> scores, int number); 
void SortTestScores(vector<int> scores, int n); 

void main(){ 

    vector<int> testScores; 
    float averageScore, score; 

    int number, i; 

    cout << "Enter number of test scores: "; 
    cin >> number; 

    cout << "Enter test scores: "; 
    for (i = 0; i < number; i++){ 
     cin >> score; 
     testScores.push_back(score); 
    } 

    SortTestScores(testScores, number); 

    cout << "Sorted test scores: "; 
    for (i = 0; i < number; i++){ 
     cout << testScores.at(i); 
    } 

    averageScore = Average(testScores, number); 

    cout << "Average test score is: " << averageScore << endl; 
    system("pause"); 
} 

//sort function 

void SortTestScores(vector<int> scores, int number){ 
    int temp; //temporary variable 
    int i, j; //loop variables 
    for (i = 1; i < number; i++){ 
     for (j = 0; j < number - i; j++){ 
      if (scores.at(j) > scores.at(j+1)){ 
       temp = scores.at(j); 
       scores.at(j) = scores.at (j+1); 
       scores.at(j+1) = temp; 
      } 
     } 
    } 
} 

float Average(vector<int> score, int n){ 
    int i; 
    float avg = 0.0; 
    for (i = 0; i < n; i++){ 
     avg+=score.at(i); 
    } 
    avg = avg/n; 
    return avg; 
} 
+2

當調用'SortTestScores'時,您正在傳遞一個向量的副本。如果你想改變主數據,你需要通過引用來傳遞矢量。在「平均數」中,您應該將其作爲效率成本參考。 –

回答

1

變化:

void SortTestScores(vector<int> scores, int number); 

void SortTestScores(vector<int> &scores, int number); 

,使得該載體通過參考並在功能留在原矢量所做的更改通過。或者,您可以使用:

vector<int> SortTestScores(vector<int> scores, int number); 
testScores = SortTestScores(testScores, number); 

返回已排序的向量並將其分配給原始數據,但效率非常低。如果你正在使用C++ 11,你可以使用: std :: sort(myvector.begin(),myvector.end());非常有效的排序(Timsort)的 。

+1

'std :: sort'不限於C++ 11 – acraig5075

+0

'testScores = SortTestScores(std :: move(testScores),number)'將和傳遞參考一樣高效 –