std::forward_iterator
std::forward_iterator (순방향 반복자 컨셉)
input_iterator를 정제해 다중 패스 알고리즘에 적합하게 하고, 같은 범위의 두 반복자를 서로 비교할 수 있음을 보장하는 컨셉이에요. C++20부터 있어요.
출처: cppreference
본문
<iterator> 헤더에 정의돼 있어요.
template< class I >
concept forward_iterator =
std::input_iterator<I> &&
std::derived_from</*ITER_CONCEPT*/<I>, std::forward_iterator_tag> &&
std::incrementable<I> &&
std::sentinel_for<I, I>;
이 컨셉은 std::input_iterator를 정제해, I가 std::incrementable을 모델링할 것(따라서 다중 패스 알고리즘에 적합함)을 요구하고, 같은 범위의 두 반복자를 서로 비교할 수 있음을 보장해요.
반복자 컨셉 결정
/*ITER_CONCEPT*/<I>는 ITER_TRAITS<I>::iterator_concept이 유효하면 그 타입을, 아니면 iterator_category가 유효하면 그 타입을, 아니면 iterator_tag_t<iter_traits_t<I>>를 나타내요.
의미 요구사항
forward_iterator<I>가 모델링되려면 다음이 성립해야 해요.
- [i, s)가 범위를 나타내는 반복자·센티널 i, s에 대해,
i의 사본j에++를 적용해도 반복자가 남긴 대상의 역참조가 변경되지 않는다(다중 패스 보장).