algorithm_inclusive_scan
algorithm_inclusive_scan (포함적 누적 합계)
std::inclusive_scan은 범위의 요소들에 대해 포함적(inclusive) 접두 합계를 계산해요. 각 위치의 결과에 자기 자신의 요소를 포함하는 게 특징이에요.
출처: cppreference
본문
std::inclusive_scan은 <numeric> 헤더에 정의되어 있어요. C++17부터 사용 가능해요.
template< class InputIt, class OutputIt >
OutputIt inclusive_scan( InputIt first, InputIt last,
OutputIt d_first );
template< class InputIt, class OutputIt, class BinaryOp >
OutputIt inclusive_scan( InputIt first, InputIt last,
OutputIt d_first, BinaryOp op );
이진 연산 op를 사용해 포함적 접두 합계를 계산해요. [0, std::distance(first, last))의 각 정수 i에 대해 [first, iter]의 요소(여기서 iter는 first의 i번째 다음 반복자)로 수열을 만들고 그 수열에 op를 이용한 일반화된 비가환 합을 구해 *dest에 할당해요.
1번 오버로드는 inclusive_scan(first, last, d_first, std::plus<>())와 동등해요. 병렬 실행 정책을 받는 오버로드도 있어요.
반환값 (Return value)
출력 범위의 끝(past-the-end) 반복자예요.
예제 (Example)
#include <functional>
#include <iostream>
#include <iterator>
#include <numeric>
#include <vector>
int main()
{
std::vector data {3, 1, 4, 1, 5, 9, 2, 6};
std::cout << "inclusive sum: ";
std::inclusive_scan(data.begin(), data.end(),
std::ostream_iterator<int>(std::cout, " "));
std::cout << '\n';
}
출력:
inclusive sum: 3 4 8 9 14 23 25 31