[C++] vector 모든 값의 평균 계산

vector의 모든 요소들의 평균을 계산하는 방법을 소개합니다.

1. for문으로 평균 값 계산

반복문으로 vector의 모든 요소를 순회하면서 합계를 계산하고 전체 개수로 나눠서 평균 값을 계산할 수 있습니다.

#include <iostream>
#include <vector>
#include <numeric>

template<typename T>
double getAverage(std::vector<T> const& vec) {
    if (vec.empty()) {
        return 0;
    }

    double sum = 0.0;
    for (int i = 0; i < vec.size(); i++) {
        sum += (double) vec.at(i);
    }
    return sum / vec.size();
}

int main()
{
    std::vector<int> vec = {1, 2, 3, 4, 5};

    double avg = getAverage(vec);
    std::cout << "Average: " << avg << std::endl;

    return 0;
}

Output:

Average: 3

2. std::accumulate()를 이용한 방법

std::accumulate(first, last, init)은 배열의 first에서 last 구간의 요소들의 합을 리턴합니다. init은 합계에 기본으로 추가되는 값입니다. init을 10으로 전달하면 합계에 10이 추가된 값이 리턴됩니다.

아래와 같이 vector의 평균을 계산할 수 있습니다.

#include <iostream>
#include <vector>
#include <numeric>

template<typename T>
double getAverage(std::vector<T> const& vec) {
    if (vec.empty()) {
        return 0;
    }
    return std::accumulate(vec.begin(), vec.end(), 0.0) / vec.size();
}

int main()
{
    std::vector<int> vec = {1, 2, 3, 4, 5};

    double avg = getAverage(vec);
    std::cout << "Average: " << avg << std::endl;

    return 0;
}

Output:

Average: 3

3. std::reduce()를 이용한 방법

std::reduce(first, last, init)도 first에서 last 범위의 vector 요소들의 합을 리턴합니다. init은 초기 값으로, 합계에 더해서 리턴되는 값입니다.

아래와 같이 vector의 평균을 계산할 수 있습니다.

#include <iostream>
#include <vector>
#include <numeric>

template<typename T>
double getAverage(std::vector<T> const& vec) {
    if (vec.empty()) {
        return 0;
    }
    return std::reduce(vec.begin(), vec.end(), 0.0) / vec.size();
}

int main()
{
    std::vector<int> vec = {1, 2, 3, 4, 5};

    double avg = getAverage(vec);
    std::cout << "Average: " << avg << std::endl;

    return 0;
}

Output:

Average: 3
Loading script...
codechachaCopyright ©2019 codechacha