inclusive_scan

inclusive_scan (접두 합계 — 자기 포함)

범위에 누적 연산(기본 덧셈)을 적용해 접두 합계를 구하되, 각 위치가 자기 자신까지 포함한 이전 원소들의 합을 갖는 알고리즘이에요. <numeric> 헤더, C++17부터.

출처: cppreference

본문

inclusive_scan은 입력 범위 [first, last)를 읽어, d_first부터 각 위치에 "첫 원소부터 그 위치까지의 누적 합"을 저장해요.

template< class InputIt, class OutputIt >
OutputIt inclusive_scan( InputIt first, InputIt last,
                         OutputIt d_first );   // (1)
    1. init 없이 기본 덧셈으로 누적해요(첫 원소가 그대로 시작값).
    1. 실행 정책 버전.
  • 3,4) 사용자 정의 이진 연산과 선택적 init 버전.

예를 들어 {1, 2, 3, 4}에 inclusive_scan을 하면 결과는 {1, 3, 6, 10}이에요. 각 출력이 "자기 자신까지의 누적 합"이죠. (exclusive_scan{0, 1, 3, 6}이 돼요.)

병렬 실행이 가능해 큰 배열의 접두 합계를 스레드로 나눠 계산할 때 유용해요. 반환 값은 마지막으로 쓰인 출력 다음 반복자예요.

inclusive(자기 포함)와 exclusive(자기 제외)의 차이만 기억하면 돼요.

더 알아보기 (Learn more)

cppreference