7.2 KiB
[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 &®ular_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 &®ular_invocable<const F&, range_reference_t>; constexpr sentinel end(); constexpr iterator end() requires common_range; constexpr sentinel end() constrequires range &®ular_invocable<const F&, range_reference_t>; constexpr iterator end() constrequires common_range &®ular_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);
Effects: Initializes base_ with std::move(base) andfun_ with std::move(fun).
constexpr iterator<false> begin();
Effects: Equivalent to:return iterator{*this, ranges::begin(base_)};
constexpr iterator<true> begin() const requires [range](range.range#concept:range "25.4.2 Ranges [range.range]")<const V> && [regular_invocable](concept.regularinvocable#concept:regular_invocable "18.7.3 Concept regular_invocable [concept.regularinvocable]")<const F&, range_reference_t<const V>>;
Effects: Equivalent to:return iterator{*this, ranges::begin(base_)};
constexpr sentinel<false> end();
Effects: Equivalent to:return sentinel{ranges::end(base_)};
constexpr iterator<false> end() requires [common_range](range.refinements#concept:common_range "25.4.6 Other range refinements [range.refinements]")<V>;
Effects: Equivalent to:return iterator{*this, ranges::end(base_)};
constexpr sentinel<true> end() const requires [range](range.range#concept:range "25.4.2 Ranges [range.range]")<const V> && [regular_invocable](concept.regularinvocable#concept:regular_invocable "18.7.3 Concept regular_invocable [concept.regularinvocable]")<const F&, range_reference_t<const V>>;
Effects: Equivalent to:return sentinel{ranges::end(base_)};
constexpr iterator<true> end() const requires [common_range](range.refinements#concept:common_range "25.4.6 Other range refinements [range.refinements]")<const V> && [regular_invocable](concept.regularinvocable#concept:regular_invocable "18.7.3 Concept regular_invocable [concept.regularinvocable]")<const F&, range_reference_t<const V>>;
Effects: Equivalent to:return iterator{*this, ranges::end(base_)};