2017-04-12 15 views
0

ユーザ定義のテストスコアを保持するのに十分な大きさのSTLベクトルを使用するプログラムを作成する必要があります。すべての数字が入力されたら、テストスコアを平均して昇順に並べ替える必要があります。私が持っている問題は、私が入れようとしているスコアの数を入れた後で、私が入れた数字の数字が何であっても、最初のものだけを読んでそれを平均として使い、昇順がかなりです私がお互い隣に置いた数の倍数。これは私がこれまで持っていたものです。何か助けてくれてありがとう!C++ STLベクトル

#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'が呼び出されると、ベクターのコピーを渡しています。メインのデータを変更したい場合は、ベクトルを参照する必要があります。 'Average'では効率化のためのコスト参照として渡すべきでしょう。 –

答えて

1

変更:

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

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

にベクトルを参照し、元のベクトルの関数滞在で行われた変更によって渡されるように。または、次のように使用することもできます。

ソートされたベクトルを返して元に戻しますが、それは非常に非効率的です。 また、C++ 11を使用している場合は、次を使用できます。 std :: sort(myvector.begin()、myvector.end());非常に効率的なソート(Timsort)のための 。

+1

'std :: sort'はC++に限定されていません。11 – acraig5075

+0

' testScores = SortTestScores(std :: move(testScores)、number) 'は、pass-byリファレンスと同じくらい効率的です –

関連する問題