4.1 KiB
[range.zip.transform.view]
25 Ranges library [ranges]
25.7 Range adaptors [range.adaptors]
25.7.26 Zip transform view [range.zip.transform]
25.7.26.2 Class template zip_transform_view [range.zip.transform.view]
namespace std::ranges {template<move_constructible F, input_range... Views>requires (view && ...) && (sizeof...(Views) > 0) && is_object_v &®ular_invocable<F&, range_reference_t...> &&can-reference<invoke_result_t<F&, range_reference_t...>>class zip_transform_view : public view_interface<zip_transform_view<F, Views...>> {movable-box fun_; // exposition only zip_view<Views...> zip_; // exposition onlyusing InnerView = zip_view<Views...>; // exposition onlytemplateusing ziperator = iterator_t<maybe-const<Const, InnerView>>; // exposition onlytemplateusing zentinel = sentinel_t<maybe-const<Const, InnerView>>; // exposition only// [range.zip.transform.iterator], class template zip_transform_view::iteratortemplate class iterator; // exposition only// [range.zip.transform.sentinel], class template zip_transform_view::sentineltemplate class sentinel; // exposition onlypublic: zip_transform_view() = default; constexpr explicit zip_transform_view(F fun, Views... views); constexpr auto begin() { return iterator(*this, zip_.begin()); }constexpr auto begin() constrequires range<const InnerView> &®ular_invocable<const F&, range_reference_t...> {return iterator(*this, zip_.begin()); }constexpr auto end() {if constexpr (common_range<InnerView>) {return iterator(*this, zip_.end()); } else {return sentinel(zip_.end()); }}constexpr auto end() constrequires range<const InnerView> &®ular_invocable<const F&, range_reference_t...> {if constexpr (common_range<const InnerView>) {return iterator(*this, zip_.end()); } else {return sentinel(zip_.end()); }}constexpr auto size() requires sized_range<InnerView> {return zip_.size(); }constexpr auto size() const requires sized_range<const InnerView> {return zip_.size(); }}; template<class F, class... Rs> zip_transform_view(F, Rs&&...) -> zip_transform_view<F, views::all_t...>;}
constexpr explicit zip_transform_view(F fun, Views... views);
Effects: Initializes fun_ with std::move(fun) andzip_ with std::move(views)....