4.9 KiB
[range.adjacent.transform.view]
25 Ranges library [ranges]
25.7 Range adaptors [range.adaptors]
25.7.28 Adjacent transform view [range.adjacent.transform]
25.7.28.2 Class template adjacent_transform_view [range.adjacent.transform.view]
namespace std::ranges {template<forward_range V, move_constructible F, size_t N>requires view && (N > 0) && is_object_v &®ular_invocable<F&, REPEAT(range_reference_t, N)...> &&can-reference<invoke_result_t<F&, REPEAT(range_reference_t, N)...>>class adjacent_transform_view : public view_interface<adjacent_transform_view<V, F, N>> {movable-box fun_; // exposition only adjacent_view<V, N> inner_; // exposition onlyusing InnerView = adjacent_view<V, N>; // exposition onlytemplateusing inner-iterator = iterator_t<maybe-const<Const, InnerView>>; // exposition onlytemplateusing inner-sentinel = sentinel_t<maybe-const<Const, InnerView>>; // exposition only// [range.adjacent.transform.iterator], class template adjacent_transform_view::iteratortemplate class iterator; // exposition only// [range.adjacent.transform.sentinel], class template adjacent_transform_view::sentineltemplate class sentinel; // exposition onlypublic: adjacent_transform_view() = default; constexpr explicit adjacent_transform_view(V base, F fun); constexpr V base() const & requires copy_constructible { return inner_.base(); }constexpr V base() && { return std::move(inner_).base(); }constexpr auto begin() {return iterator(*this, inner_.begin()); }constexpr auto begin() constrequires range<const InnerView> &®ular_invocable<const F&, REPEAT(range_reference_t, N)...> {return iterator(*this, inner_.begin()); }constexpr auto end() {if constexpr (common_range<InnerView>) {return iterator(*this, inner_.end()); } else {return sentinel(inner_.end()); }}constexpr auto end() constrequires range<const InnerView> &®ular_invocable<const F&, REPEAT(range_reference_t, N)...> {if constexpr (common_range<const InnerView>) {return iterator(*this, inner_.end()); } else {return sentinel(inner_.end()); }}constexpr auto size() requires sized_range<InnerView> {return inner_.size(); }constexpr auto size() const requires sized_range<const InnerView> {return inner_.size(); }constexpr auto reserve_hint() requires approximately_sized_range<InnerView> {return inner_.reserve_hint(); }constexpr auto reserve_hint() const requires approximately_sized_range<const InnerView> {return inner_.reserve_hint(); }};}
constexpr explicit adjacent_transform_view(V base, F fun);
Effects: Initializes fun_ with std::move(fun) andinner_ with std::move(base).