2017-04-12 1 views
0

사용자 정의 테스트 점수를 저장할 수있는 STL 벡터를 사용하는 프로그램을 작성해야합니다. 모든 수치가 입력되면, 나는 시험 점수를 평균화하고 오름차순으로 정렬해야합니다. 내가 겪고있는 문제는 내가 넣을 점수의 숫자를 넣은 후에 어떤 숫자를 입력했는지에 상관없이 첫 번째 것만 읽으면 평균을 사용하고 오름차순은 꽤 높습니다. number는 내가 얼마나 많은 점수를 서로 득점했는지 나타냅니다. 이것은 내가 지금까지 가지고있는 것이다. 어떤 도움을 주셔서 감사합니다!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'가 호출되면 벡터의 복사본을 전달하게됩니다. 메인의 데이터를 변경하려면 참조로 벡터를 전달해야합니다. '평균'에서는 효율성을 높이기 위해 비용 참조로 전달해야합니다. –

답변

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 reference만큼 효율적입니다. –