ホームページ >バックエンド開発 >C++ >C ベクトルの要素を効率的に合計するにはどうすればよいですか?

C ベクトルの要素を効率的に合計するにはどうすればよいですか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-11-24 09:15:14966ブラウズ

How Can I Efficiently Sum the Elements of a C   Vector?

C ベクトル内の要素の合計の決定

C では、 std::vector 内の要素の合計を求めるにはループが必要ですまたは、値を反復して累積する標準アルゴリズム。方法の選択は使用する C のバージョンによって異なり、それぞれの方法に独自の利点があります。

C 03

  • クラシックfor ループ: 従来の for ループを使用して要素を反復処理し、累計を増分します。変数。

    int sum_of_elems = 0;
    for (auto it = vector.begin(); it != vector.end(); ++it)
      sum_of_elems += *it;
  • 累積アルゴリズム: このアルゴリズムは によって提供されます。ヘッダーは、反復子の範囲を介して渡された要素の合計を累積します。

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

C 11 以降

  • std::accumulate with auto-typing: 同じstd::accumulate アルゴリズムを少し変更して使用すると、ベクトルの要素の型に基づいて戻り値の型を自動的に推定できます。

    #include <numeric>
    decltype(vector)::value_type sum_of_elems = std::accumulate(vector.begin(), vector.end(), decltype(vector)::value_type(0));
  • std::for_each ループ: このループ構文は、ベクトルの各要素にラムダ関数を適用し、その内の合計変数を更新します。 scope.

    std::for_each(vector.begin(), vector.end(), [&](int n) { sum_of_elems += n; });
  • 範囲ベースの for ループ: この糖衣構文の for ループは、別個の反復子オブジェクトを使用せずに要素を直接反復します。

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

C 17 および後で

  • std::reduce アルゴリズム: このアルゴリズムは、特定の二項演算子 (この場合は加算) を使用して、コレクションの要素を 1 つの結果に結合します。 。また、結果の型も自動的に推測されます。

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

以上がC ベクトルの要素を効率的に合計するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。