accumulate()

김민수·2025년 1월 8일

C++

목록 보기
41/68

컨테이너의 요소를 지정된 연산으로 누적해서 계산하는 데 사용되는 알고리즘 함수다.
std::accumulate는 기본적으로 더하기 연산을 수행하지만, 커스텀 연산을 지정하여 다양한 방식으로 누적 계산이 가능하다. 이 함수는 시간 복잡도 O(n)으로 동작한다.


1. 매개변수

#include <numeric>

std::accumulate(시작_반복자, 끝_반복자, 초기값, [커스텀_연산]);
  • 시작_반복자: 누적 연산을 시작할 첫 번째 요소의 반복자
  • 끝_반복자: 누적 연산을 종료할 위치(포함되지 않음)
  • 초기값: 계산을 시작하기 전 초기 값
  • 커스텀_연산 (선택사항): 사용자 정의 연산을 지정. 지정해주지 않으면 기본적으로 더하기 연산을 함


2. 반환값

  • 누적 계산 결과를 반환


3. 기본 예제 (벡터의 합 계산)

#include <iostream>
#include <vector>
#include <numeric> // std::accumulate

int main() {
    std::vector<int> vec = {1, 2, 3, 4, 5};

    // 벡터의 모든 요소를 더하여 합 계산
    int sum = std::accumulate(vec.begin(), vec.end(), 0);

    std::cout << "Sum: " << sum << "\n"; // 출력: Sum: 15

    return 0;
}


4. 벡터의 곱 계산 (커스텀 연산)

#include <iostream>
#include <vector>
#include <numeric> // std::accumulate

int main() {
    std::vector<int> vec = {1, 2, 3, 4, 5};

    // 벡터의 모든 요소를 곱하여 결과 계산
    int product = std::accumulate(vec.begin(), vec.end(), 1, [](int a, int b) {
        return a * b;
    });

    std::cout << "Product: " << product << "\n"; // 출력: Product: 120

    return 0;
}


5. 문자열 누적 (문자열 연결)

#include <iostream>
#include <vector>
#include <numeric> // std::accumulate
#include <string>

int main() {
    std::vector<std::string> words = {"Hello", " ", "World", "!"};

    // 문자열 누적 (연결)
    std::string result = std::accumulate(words.begin(), words.end(), std::string(""));

    std::cout << "Concatenated String: " << result << "\n"; // 출력: Concatenated String: Hello World!

    return 0;
}


6. 조건부 누적 (짝수 합 계산)

#include <iostream>
#include <vector>
#include <numeric> // std::accumulate

int main() {
    std::vector<int> vec = {1, 2, 3, 4, 5, 6};

    // 짝수만 누적하여 합 계산
    int evenSum = std::accumulate(vec.begin(), vec.end(), 0, [](int a, int b) {
        return b % 2 == 0 ? a + b : a;
    });

    std::cout << "Sum of even numbers: " << evenSum << "\n"; // 출력: Sum of even numbers: 12

    return 0;
}


7. 사용자 정의 구조체 누적 (총 연령 계산)

#include <iostream>
#include <vector>
#include <numeric> // std::accumulate

struct Person {
    std::string name;
    int age;
};

int main() {
    std::vector<Person> people = {{"Alice", 25}, {"Bob", 30}, {"Charlie", 35}};

    // 총 연령 누적 계산
    int totalAge = std::accumulate(people.begin(), people.end(), 0, [](int sum, const Person &p) {
        return sum + p.age;
    });

    std::cout << "Total Age: " << totalAge << "\n"; // 출력: Total Age: 90

    return 0;
}
profile
안녕하세요

0개의 댓글