C++ STL vector

标签 c++ vector

我需要编写一个程序来使用一个足够大的 STL vector 来保存用户定义数量的测试分数。输入所有数字后,我需要对测试分数进行平均并按升序对它们进行排序。我遇到的问题是在我输入我要输入的分数之后,无论我输入什么数字分数,它只读取第一个然后使用它作为平均值并且升序几乎是数字乘以我彼此相邻的分数。这是我到目前为止所拥有的。感谢您的帮助!

#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 通过引用传递,函数中所做的更改保留在原始 vector 中。或者你可以使用:

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

返回排序后的 vector 并将其分配给原始 vector ,但效率会很低。 此外,如果您使用的是 c++11,则可以使用: std::sort(myvector.begin(), myvector.end()); 用于非常有效的排序 (Timsort)。

关于C++ STL vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43359844/

相关文章:

如果我向类构造函数添加一个伪参数,C++ 内存访问冲突神秘地消失了

c++ - 使用模板自定义 RTTI 信息

c++ - MFC数据通过PostMessage转发到主线程

c++ - 多个数组操作

r - 计算相同长度向量中的连续元素

c++ - 作为 friend 处理运算符重载方法

c++ - VisualStudio - 非常长的监视变量的别名

c++ - 程序在 cin 之后停止 - C++

C++ 用更多元素重写浮点 vector

C++ STL vector 迭代器...但出现运行时错误