std::vector の要素を合計するにはどうすればいいですか? 質問する

std::vector の要素を合計するにはどうすればいいですか? 質問する

内のすべての要素の合計を求める良い方法は何ですかstd::vector?

いくつかの要素を含むベクトルがあるとしますstd::vector<int> vector。ここで、すべての要素の合計を求めます。これを行うにはどのような方法がありますか?

ベストアンサー1

実は方法はいくつかあります。

int sum_of_elems = 0;

C++03

  1. 古典的な for ループ:

     for(std::vector<int>::iterator it = vector.begin(); it != vector.end(); ++it)
         sum_of_elems += *it;
    
  2. 標準アルゴリズムの使用:

     #include <numeric>
    
     sum_of_elems = std::accumulate(vector.begin(), vector.end(), 0);
    

    重要な注意:最後の引数の型は、初期値だけでなく、結果の型にも使用されます。そこに int を置くと、ベクターに float があっても int が累積されます。浮動小数点数を合計する場合は、または(0に変更します。0.00.0fnneonneoに感謝)。以下の C++11 ソリューションも参照してください。

C++11以上

  1. b. 将来変更があった場合でもベクタータイプを自動的に追跡します。

     #include <numeric>
    
     sum_of_elems = std::accumulate(vector.begin(), vector.end(),
                                    decltype(vector)::value_type(0));
    
  2. 使用方法std::for_each:

     std::for_each(vector.begin(), vector.end(), [&] (int n) {
         sum_of_elems += n;
     });
    
  3. 範囲ベースのforループを使用する(ロジャー・ペイトに感謝):

     for (auto& n : vector)
         sum_of_elems += n;
    

C++17以上

  1. whichを使用するとstd::reduce、結果の型も処理されます。たとえば、 がある場合std::vector<int>int結果として が返されます。 がある場合std::vector<float>、 が返されますfloat。 がある場合std::vector<std::string>、(すべての文字列が連結された) が返されますstd::string。興味深いと思いませんか?

    #include <numeric>       
    
    auto result = std::reduce(v.begin(), v.end());
    

    があるこの関数の他のオーバーロード大規模なコレクションがあり、結果をすぐに取得したい場合には、並列実行することもできます。

おすすめ記事