雑談

ふとした時に雑談を投下します.内容はロボットのことだったりそうでなかったり.

vectorの要素の合計を計算

vectorの要素を全て足し合わせたいときに関数一発叩けば出来ないかなと思っていたらaccumulateを使えば出来るらしい.僕は低能なのでfor文使ったろうかって考えてた.

とりあえず以下にテストコードを示す.

#include <iostream>
#include <random>

using namespace std;

int main(int argc, char *argv[])
{
    vector<double> vec;
    std::random_device rd;
    std::mt19937 mt(rd());
    uniform_real_distribution<double> score(0.0,10.0);

    for(int i=0;i<10;i++)
        vec.push_back(score(mt));
    
    cout << "sum=" << accumulate(vec.begin(), vec.end(), 0.0) << endl;

    return 0;
}

内容としては簡単だが,10個ランダムの値を生成しvecに格納する.その後accumulateを呼び出し合計を計算している.このaccumulateであるが,第一引数,第二引数にはvectorの先頭,末尾の値をいれる.第三引数であるが,しらべたら初期値を入れてあげるらしい.

この関数を使用すれば合計を計算した後データの総個数で割れば平均を出すことも簡単である.一行で完結してしまうので非常に便利.