C++ で配列の合計を計算する

胡金庫 2023年10月12日
  1. C++ で配列要素の和を計算するには、std::accumulate 関数を使用する
  2. C++ でサブアレイの部分和を計算するには、std::partial_sum 関数を使用する
C++ で配列の合計を計算する

この記事では、C++ で配列要素の合計を計算する方法のいくつかの方法について説明します。

C++ で配列要素の和を計算するには、std::accumulate 関数を使用する

std::accumulate は、ヘッダーファイル <numeric> の下の STL ライブラリに含まれている数値関数の一部です。std::accumulate は、指定された範囲内の要素で機能する汎用関数であり、対応するイテレータによって表される最初の 2つの引数によって指定されます。3 番目の引数は、合計の初期値を渡すために使用されます。これは、オブジェクトのリテラル値にすることができます。この場合、std::vector コンテナに格納されている整数の動的配列を示します。std::accumulate は、オプションで、バイナリ関数オブジェクトタイプの 4 番目の引数を取り、加算演算を置き換えることができることに注意してください。次のサンプルコードの std::accumulate への 2 番目の呼び出しは、そのようなシナリオを示していますが、乗算が二項演算として使用されるという唯一の違いがあります。

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

using std::accumulate;
using std::cin;
using std::cout;
using std::endl;
using std::vector;

template <typename T>
void printVector(vector<T> &vec) {
  for (const auto &item : vec) {
    cout << item << ", ";
  }
  cout << endl;
}

int main() {
  vector<int> arr1 = {1, 12, 13, 10, 11};

  printVector(arr1);

  int arr1_sum = accumulate(arr1.begin(), arr1.end(), 0);
  cout << "sum of arr1 = " << arr1_sum << endl;

  int arr1_product =
      accumulate(arr1.begin(), arr1.end(), 1, std::multiplies<>());
  cout << "product of arr1 = " << arr1_product << endl;

  return EXIT_SUCCESS;
}

出力:

1, 12, 13, 10, 11,
sum of arr1 = 47
product of arr1 = 17160

C++ でサブアレイの部分和を計算するには、std::partial_sum 関数を使用する

同じヘッダーファイルによって提供されるもう 1つの便利な数値関数は、std::partial_sum です。これは、指定された範囲のサブ範囲を合計します。この関数は、3 番目の引数が計算された数値が格納される範囲の開始イテレータである必要があることを除いて、前のインターフェイスと同様のインターフェイスを提供します。この場合、既存のベクトル要素を合計結果で上書きします。カスタム二項演算を std::partial_sum で指定して、デフォルトのオプションである加算を変更することもできることに注意してください。

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

using std::cin;
using std::cout;
using std::endl;
using std::vector;

template <typename T>
void printVector(vector<T> &vec) {
  for (const auto &item : vec) {
    cout << item << ", ";
  }
  cout << endl;
}

int main() {
  vector<int> arr1 = {1, 12, 13, 10, 11};

  printVector(arr1);

  std::partial_sum(arr1.begin(), arr1.end(), arr1.begin());
  printVector(arr1);

  std::partial_sum(arr1.begin(), arr1.end(), arr1.begin(), std::multiplies());
  printVector(arr1);

  return EXIT_SUCCESS;
}

出力:

1, 13, 26, 36, 47,
1, 13, 338, 12168, 571896,

あるいは、これらの関数を使用して、指定された範囲内の要素間でビット単位の演算を実行することもできます。たとえば、次のコードスニペットは vector 要素を XOR し、結果値を同じ範囲に格納します。

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

using std::cin;
using std::cout;
using std::endl;
using std::vector;

template <typename T>
void printVector(vector<T> &vec) {
  for (const auto &item : vec) {
    cout << item << ", ";
  }
  cout << endl;
}

int main() {
  vector<int> arr1 = {1, 12, 13, 10, 11};

  printVector(arr1);

  std::partial_sum(arr1.begin(), arr1.end(), arr1.begin(), std::bit_xor());
  printVector(arr1);

  return EXIT_SUCCESS;
}

出力:

1, 13, 0, 10, 1,
著者: 胡金庫
胡金庫 avatar 胡金庫 avatar

DelftStack.comの創設者です。Jinku はロボティクスと自動車産業で8年以上働いています。自動テスト、リモートサーバーからのデータ収集、耐久テストからのレポート作成が必要となったとき、彼はコーディングスキルを磨きました。彼は電気/電子工学のバックグラウンドを持っていますが、組み込みエレクトロニクス、組み込みプログラミング、フロントエンド/バックエンドプログラミングへの関心を広げています。

LinkedIn Facebook

関連記事 - C++ Array