C++에서 배열의 합계 계산

Jinku Hu 2023년10월12일
  1. std::accumulate함수를 사용하여 C++에서 배열 요소의 합계를 계산합니다
  2. std::partial_sum함수를 사용하여 C++에서 부분 배열의 부분 합계 계산
C++에서 배열의 합계 계산

이 기사에서는 C++에서 배열 요소의 합계를 계산하는 방법에 대한 몇 가지 방법을 설명합니다.

std::accumulate함수를 사용하여 C++에서 배열 요소의 합계를 계산합니다

std::accumulate는 헤더 파일<numeric>아래 STL 라이브러리에 포함 된 숫자 함수의 일부입니다. std::accumulate는 주어진 범위의 요소에 대해 작동하는 일반 함수로, 해당 반복자가 나타내는 처음 두 개의 인수로 지정됩니다. 세 번째 인수는 개체의 리터럴 값이 될 수있는 합계의 초기 값을 전달하는 데 사용됩니다. 이 경우 std::vector컨테이너에 저장된 정수의 동적 배열을 보여줍니다. std::accumulate는 선택적으로 이진 함수 객체 유형의 네 번째 인수를 사용하여 더하기 연산을 대체 할 수 있습니다. 다음 예제 코드에서std::accumulate에 대한 두 번째 호출은 곱셈이 이진 연산으로 사용된다는 유일한 차이점을 제외하고 이러한 시나리오를 보여줍니다.

#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

std::partial_sum함수를 사용하여 C++에서 부분 배열의 부분 합계 계산

동일한 헤더 파일에서 제공하는 또 다른 유용한 숫자 함수는std::partial_sum으로, 주어진 범위의 하위 범위를 합산합니다. 이 함수는 세 번째 인수가 계산 된 숫자가 저장 될 범위의 시작 반복자 여야한다는 점을 제외하고 이전 것과 유사한 인터페이스를 제공합니다. 이 경우 합산 된 결과로 기존 벡터 요소를 덮어 씁니다. 사용자 지정 바이너리 연산은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,
작가: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.

LinkedIn Facebook

관련 문장 - C++ Array