Computer >> 컴퓨터 >  >> 프로그래밍 >> C++

C++ STL 배열 합계 구하기: 반복문부터 accumulate 함수까지


배열(Array)은 동일한 데이터 타입의 요소들을 연속된 메모리 공간에 저장하는 선형 자료구조입니다.

배열 합계(array sum)란 배열에 담긴 모든 요소의 값을 더한 결과를 의미합니다.

C++에서는 배열의 합계를 구할 수 있는 방법이 여러 가지 있습니다. 이번 글에서는 가장 많이 사용되는 세 가지 방법을 예제 코드와 함께 살펴보겠습니다.

1. 기본 반복문을 이용한 방법

배열의 모든 요소의 합을 구하는 가장 기본적인 방법은 반복문으로 배열의 각 요소를 순회하면서 해당 값을 합계 변수(sum)에 더하는 것입니다. 시간 복잡도는 O(n)으로, 배열의 크기에 비례합니다.

알고리즘

Step 1 : i가 0부터 n-1까지 반복하며 Step 2를 수행한다.
Step 2 : sum = sum + arr[i]
Step 3 : sum을 출력한다.

예제 코드

#include <iostream>
using namespace std;
int main (){
    int arr[] = { 2, 5, 7, 8, 2, 6, 9 };
    int n = 7, sum = 0;
    for(int i = 0; i<n ; i++){
        sum += arr[i];
    }
    cout<<"배열의 합계는 "<<sum;
    return 0;
}

실행 결과

배열의 합계는 39

2. accumulate 함수를 이용한 방법

C++ 표준 라이브러리(STL)의 accumulate 함수를 사용하면 반복문을 직접 작성하지 않고도 배열의 합계를 간단하게 구할 수 있습니다. 이 함수는 <numeric> 헤더 파일에 정의되어 있으며, 시작 위치, 끝 위치, 초기값 세 가지 인자를 받습니다.

문법

accumulate(array_name, array_name + length, sum);

예제 코드

#include <iostream>
#include <numeric>
using namespace std;
int main (){
    int arr[] = { 2, 5, 7, 8, 2, 6, 9 };
    int n = 7, sum = 0;
    sum = accumulate(arr, arr + n, sum);
    cout<<"배열의 합계는 "<<sum;
    return 0;
}

실행 결과

배열의 합계는 39

3. 벡터(vector)의 합계 구하기

accumulate 함수는 일반 배열뿐만 아니라 vector 컨테이너에도 그대로 적용할 수 있습니다. begin()과 end() 반복자를 인자로 전달하면 벡터에 저장된 모든 요소의 합계를 손쉽게 반환받을 수 있습니다.

예제 코드

#include <iostream>
#include <vector>
#include <numeric>
using namespace std;

int arraySum(vector<int> &v){
    int initial_sum = 0;
    return accumulate(v.begin(), v.end(), initial_sum);
}

int main(){
    vector<int> v{12, 56, 76, 2, 90, 3};
    int sum = 0;
    sum = accumulate(v.begin(), v.end(), sum);
    cout<<"배열의 합계는 "<<sum;
    return 0;
}

실행 결과

배열의 합계는 239

마무리

세 가지 방법을 정리하면 다음과 같습니다. 학습 목적이나 로직을 직접 제어해야 하는 경우에는 반복문 방식이 직관적이며, 실무에서는 코드가 간결하고 오류 가능성이 적은 accumulate 함수를 사용하는 것이 좋습니다. 특히 vector 같은 STL 컨테이너를 다룰 때는 accumulate가 가장 널리 쓰이는 표준적인 선택입니다. 상황에 맞는 방법을 골라 활용해 보시기 바랍니다.