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

7.2 KiB
Raw Permalink Blame History

[range.transform.view]

25 Ranges library [ranges]

25.7 Range adaptors [range.adaptors]

25.7.9 Transform view [range.transform]

25.7.9.2 Class template transform_view [range.transform.view]

🔗

namespace std::ranges {template<input_range V, move_constructible F>requires view && is_object_v &&regular_invocable<F&, range_reference_t> &&can-reference<invoke_result_t<F&, range_reference_t>>class transform_view : public view_interface<transform_view<V, F>> {private:// [range.transform.iterator], class template transform_view::iteratortemplate struct iterator; // exposition only// [range.transform.sentinel], class template transform_view::sentineltemplate struct sentinel; // exposition only V base_ = V(); // exposition only**movable-box fun_; // exposition onlypublic: transform_view() requires default_initializable && default_initializable = default; constexpr explicit transform_view(V base, F fun); constexpr V base() const & requires copy_constructible { return base_; }constexpr V base() && { return std::move(base_); }constexpr iterator begin(); constexpr iterator begin() constrequires range &&regular_invocable<const F&, range_reference_t>; constexpr sentinel end(); constexpr iterator end() requires common_range; constexpr sentinel end() constrequires range &&regular_invocable<const F&, range_reference_t>; constexpr iterator end() constrequires common_range &&regular_invocable<const F&, range_reference_t>; constexpr auto size() requires sized_range { return ranges::size(base_); }constexpr auto size() const requires sized_range{ return ranges::size(base_); }constexpr auto reserve_hint() requires approximately_sized_range{ return ranges::reserve_hint(base_); }constexpr auto reserve_hint() const requires approximately_sized_range{ return ranges::reserve_hint(base_); }}; template<class R, class F> transform_view(R&&, F) -> transform_view<views::all_t, F>;}

🔗

constexpr explicit transform_view(V base, F fun);

1

#

Effects: Initializes base_ with std::move(base) andfun_ with std::move(fun).

🔗

constexpr iterator<false> begin();

2

#

Effects: Equivalent to:return iterator{*this, ranges::begin(base_)};

🔗

constexpr iterator<true> begin() const requires [range](range.range#concept:range "25.4.2Ranges[range.range]")<const V> && [regular_invocable](concept.regularinvocable#concept:regular_invocable "18.7.3Concept regular_­invocable[concept.regularinvocable]")<const F&, range_reference_t<const V>>;

3

#

Effects: Equivalent to:return iterator{*this, ranges::begin(base_)};

🔗

constexpr sentinel<false> end();

4

#

Effects: Equivalent to:return sentinel{ranges::end(base_)};

🔗

constexpr iterator<false> end() requires [common_range](range.refinements#concept:common_range "25.4.6Other range refinements[range.refinements]")<V>;

5

#

Effects: Equivalent to:return iterator{*this, ranges::end(base_)};

🔗

constexpr sentinel<true> end() const requires [range](range.range#concept:range "25.4.2Ranges[range.range]")<const V> && [regular_invocable](concept.regularinvocable#concept:regular_invocable "18.7.3Concept regular_­invocable[concept.regularinvocable]")<const F&, range_reference_t<const V>>;

6

#

Effects: Equivalent to:return sentinel{ranges::end(base_)};

🔗

constexpr iterator<true> end() const requires [common_range](range.refinements#concept:common_range "25.4.6Other range refinements[range.refinements]")<const V> && [regular_invocable](concept.regularinvocable#concept:regular_invocable "18.7.3Concept regular_­invocable[concept.regularinvocable]")<const F&, range_reference_t<const V>>;

7

#

Effects: Equivalent to:return iterator{*this, ranges::end(base_)};