ranges::fold 개념들

ranges::fold 개념들 (폴드 제약 개념)

ranges 폴드(fold) 알고리즘들이 쓰는 개념(concept)들을 모아둔 페이지예요. <algorithm> 헤더, C++23부터.

출처: cppreference

본문

C++23에서 추가된 std::ranges 폴드 알고리즘(fold_left, fold_right 등)의 타입 제약을 설명하는 개념들이에요.

주요 개념:

  • indirectly_binary_left_foldable / indirectly_binary_right_foldable: 폴드에 쓰이는 이진 연산과 반복자·초기값의 호환성을 제약해요. 반복자가 가리키는 요소 타입과 누적 타입이 연산에 적합한지 컴파일 타임에 검사해요.

예를 들어 fold_left는 초기값 init과 범위 요소를 이진 연산 op로 결합하는데, 이때 op(acc, *it)가 유효한 타입이 되어야 해요. 이런 요구사항을 개념으로 표현한 것이 위 폴드 가능(foldable) 개념들이에요.

구체적인 개념:

  • indirectly_binary_left_foldable<I, T>: I가 input 반복자이고, T(누적 타입)로 왼쪽 폴드가 가능한지.
  • indirectly_binary_right_foldable<I, T>: 오른쪽 폴드가 가능한지.

이 개념들은 사용자가 직접 쓰기보다, std::ranges::fold_left 같은 알고리즘의 시그니처 제약으로 내부적으로 사용돼요. 폴드 연산을 일반화할 때 참고하면 돼요.

더 알아보기 (Learn more)

cppreference