ranges::fold_right
ranges::fold_right (오른쪽 폴드)
범위를 오른쪽부터 이진 연산으로 누적해 결합하는 ranges 버전 폴드 알고리즘이에요. <algorithm> 헤더, C++23부터.
출처: cppreference
본문
std::ranges::fold_right는 초기값 init에 범위의 요소를 오른쪽에서 왼쪽으로 이진 연산 f로 누적해요.
namespace std::ranges {
template< std::bidirectional_iterator I, std::sentinel_for<I> S, class T,
std::indirectly_binary_right_foldable<T, I> F >
constexpr auto fold_right( I first, S last, T init, F f );
}
- 결과는
f(*first, f(*second, f(..., init)))형태의 오른쪽 폴드예요. - 반환 값:
std::optional로 감싼 최종 누적값. 범위가 비면std::nullopt. - 기본
init을 쓰는fold_right_last(마지막 요소를 초기값으로)도 있어요.
std::vector<int> v{1, 2, 3};
int r = *std::ranges::fold_right(v, 0, [](int a, int b){ return a - b; });
// 1 - (2 - (3 - 0)) = 2
fold_left와 달리 오른쪽부터 결합해요. 연산의 결합 방향이 결과에 영향을 주는 경우 방향을 구분해서 써야 해요.