繁体   English   中英

C ++ STL向量

[英]C++ STL Vectors

我需要编写一个程序以使用足够大的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;
}

更改:

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)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM