Files
2025-10-25 03:02:53 +03:00

4.9 KiB
Raw Permalink Blame History

[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 &&regular_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> &&regular_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> &&regular_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);

1

#

Effects: Initializes fun_ with std::move(fun) andinner_ with std::move(base).