|
Range primitives | |||||||
|
Range concepts | |||||||||||||||||||
|
Range factories | |||||||||
|
Range adaptors | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
Helper items | |||||||||||||||||
|
Member functions | ||||
Deduction guides | ||||
Iterator | ||||
Member functions | ||||
Non-member functions | ||||
Sentinel | ||||
Member functions | ||||
Non-member functions | ||||
Defined in header <ranges> | ||
template<ranges::input_range...Views> requires(ranges::view<Views>&& ...)&&(sizeof...(Views)>0) | (1) | (since C++23) |
namespace views{ inlineconstexpr/*unspecified*/ zip=/*unspecified*/; | (2) | (since C++23) |
Call signature | ||
template<ranges::viewable_range...Rs> requires/* see below */ | (since C++23) | |
zip_view
is a range adaptor that takes one or moreview
s, and produces aview
whosei
th element is a tuple-like value consisting of thei
th elements of all views. The size of produced view is the minimum of sizes of all adapted views.views::zip
is a customization point object.When calling with no argument,views::zip() isexpression-equivalent toauto(views::empty<std::tuple<>>).
zip_view
always modelsinput_range
, and modelsforward_range
,bidirectional_range
,random_access_range
, orsized_range
if all adaptedview
types model the corresponding concept.
zip_view
modelscommon_range
if
common_range
, orbidirectional_range
, and every adapted view type modelscommon_range
, orrandom_access_range
andsized_range
.Contents |
The nameviews::zip
denotes acustomization point object, which is a constfunction object of aliteralsemiregular
class type. SeeCustomizationPointObject for details.
Member | Description |
std::tuple<Views...>views_ | all adapted view objects (exposition-only member object*) |
constructs azip_view (public member function)[edit] | |
returns an iterator to the beginning (public member function)[edit] | |
returns an iterator or a sentinel to the end (public member function)[edit] | |
returns the number of elements, provided only if each underlying (adapted) range satisfiessized_range (public member function)[edit] | |
Inherited fromstd::ranges::view_interface | |
returns whether the derived view is empty, provided only if it satisfiessized_range orforward_range (public member function of std::ranges::view_interface<D> )[edit] | |
(C++23) | returns a constant iterator to the beginning of the range (public member function of std::ranges::view_interface<D> )[edit] |
(C++23) | returns a sentinel for the constant iterator of the range (public member function of std::ranges::view_interface<D> )[edit] |
returns whether the derived view is not empty, provided only ifranges::empty is applicable to it (public member function of std::ranges::view_interface<D> )[edit] | |
returns the first element in the derived view, provided if it satisfiesforward_range (public member function of std::ranges::view_interface<D> )[edit] | |
returns the last element in the derived view, provided only if it satisfiesbidirectional_range andcommon_range (public member function of std::ranges::view_interface<D> )[edit] | |
returns then th element in the derived view, provided only if it satisfiesrandom_access_range (public member function of std::ranges::view_interface<D> )[edit] |
the iterator type (exposition-only member class template*) | |
the sentinel type used whenzip_view is not acommon_range (exposition-only member class template*) |
template<class...Views> constexprbool enable_borrowed_range<ranges::zip_view<Views...>>= | (since C++23) | |
This specialization ofranges::enable_borrowed_range makeszip_view
satisfyborrowed_range
when each underlying view satisfies it.
Feature-test macro | Value | Std | Feature |
---|---|---|---|
__cpp_lib_ranges_zip | 202110L | (C++23) | ranges::zip_view ,ranges::zip_transform_view, ranges::adjacent_view, ranges::adjacent_transform_view |
#include <array>#include <iostream>#include <list>#include <ranges>#include <string>#include <tuple>#include <vector> void print(autoconst rem,autoconst& range){for(std::cout<< rem;autoconst& elem: range)std::cout<< elem<<' ';std::cout<<'\n';} int main(){auto x=std::vector{1,2,3,4};auto y=std::list<std::string>{"α","β","γ","δ","ε"};auto z=std::array{'A','B','C','D','E','F'}; print("Source views:",""); print("x: ", x); print("y: ", y); print("z: ", z); print("\nzip(x,y,z):",""); for(std::tuple<int&,std::string&,char&> elem: std::views::zip(x, y, z)){std::cout<< std::get<0>(elem)<<' '<< std::get<1>(elem)<<' '<< std::get<2>(elem)<<'\n'; std::get<char&>(elem)+=('a'-'A');// modifies the element of z} print("\nAfter modification, z: ", z);}
Output:
Source views:x: 1 2 3 4y: α β γ δ εz: A B C D E F zip(x,y,z):1 α A2 β B3 γ C4 δ D After modification, z: a b c d E F
aview consisting of results of application of a transformation function to corresponding elements of the adapted views(class template)(customization point object)[edit] | |
takes aview consisting oftuple-like values and a number N and produces aview of Nth element of each tuple(class template)(range adaptor object)[edit] |