|
Range primitives | |||||||
|
Range concepts | |||||||||||||||||||
|
Range factories | |||||||||
|
Range adaptors | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
Helper items | |||||||||||||||||
|
Member functions | ||||
Deduction guides | ||||
Iterator | ||||
Member functions | ||||
Non-member functions | ||||
Defined in header <ranges> | ||
template<ranges::input_range First,ranges::forward_range...Vs> requires(ranges::view<First>&& ...&&ranges::view<Vs>) | (1) | (since C++23) |
namespace views{ inlineconstexpr/*unspecified*/ cartesian_product=/*unspecified*/; | (2) | (since C++23) |
Call signature | ||
template<ranges::viewable_range...Rs> requires/* see below */ | (since C++23) | |
Helper concepts | ||
template<bool Const,class First,class...Vs> concept/*cartesian-product-is-random-access*/= | (3) | (exposition only*) |
template<class R> concept/*cartesian-product-common-arg*/= | (4) | (exposition only*) |
template<bool Const,class First,class...Vs> concept/*cartesian-product-is-bidirectional*/= | (5) | (exposition only*) |
template<class First,class...Vs> concept/*cartesian-product-is-common*/= | (6) | (exposition only*) |
template<class...Vs> concept/*cartesian-product-is-sized*/= | (7) | (exposition only*) |
template<bool Const,template<class>class FirstSent,class First,class...Vs> concept/*cartesian-is-sized-sentinel*/= | (8) | (exposition only*) |
Helper function templates | ||
template</*cartesian-product-common-arg*/ R> constexprauto/*cartesian-common-arg-end*/( R& r) | (9) | (exposition only*) |
cartesian_product_view
is a range adaptor that takesnview
s, wheren > 0, and produces aview
of tuples calculated by then-ary cartesian product of the provided ranges. The size of produced view is a multiple of sizes of provided ranges, while each element is a tuple (of references) of the sizen.views::cartesian_product
is a customization point object.cartesian_product
satisfies the helper concept/*cartesian-product-is-common*/ (see alsocommon_range
).cartesian_product
uses sized sentinel.view
. Participates in overload resolution only ifcartesian_product
satisfies the helper concept/*cartesian-product-common-arg*/.TheFirst
range
passed tocartesian_product_view
is treated specially, since it is only passed through a single time. As a result, several constrains are relaxed on it:
First
is aninput_range
instead offorward_range
;First
does not have to be asized_range
in order for thecartesian_product_view
to berandom_access_range
orcommon_range
;First
does not have to becommon_range
in order for thecartesian_product_view
to bebidirectional_range
.Contents |
The nameviews::cartesian_product
denotes acustomization point object, which is a constfunction object of aliteralsemiregular
class type. SeeCustomizationPointObject for details.
Member | Definition |
std::tuple<First, Vs...>base_ (private) | An object that holds all adaptedview objects.(exposition-only member object*) |
constructs acartesian_product_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 the 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*) |
Feature-test macro | Value | Std | Feature |
---|---|---|---|
__cpp_lib_ranges_cartesian_product | 202207L | (C++23) | std::ranges::cartesian_product_view |
#include <array>#include <iostream>#include <list>#include <ranges>#include <string>#include <vector> void print(std::tuple<charconst&,intconst&,std::stringconst&> t,int pos){constauto&[a, b, c]= t;std::cout<<'('<< a<<' '<< b<<' '<< c<<')'<<(pos%4?" ":"\n");} int main(){constauto x=std::array{'A','B'};constauto y=std::vector{1,2,3};constauto z=std::list<std::string>{"α","β","γ","δ"}; for(int i{1};autoconst& tuple: std::views::cartesian_product(x, y, z)) print(tuple, i++);}
Output:
(A 1 α) (A 1 β) (A 1 γ) (A 1 δ)(A 2 α) (A 2 β) (A 2 γ) (A 2 δ)(A 3 α) (A 3 β) (A 3 γ) (A 3 δ)(B 1 α) (B 1 β) (B 1 γ) (B 1 δ)(B 2 α) (B 2 β) (B 2 γ) (B 2 δ)(B 3 α) (B 3 β) (B 3 γ) (B 3 δ)
(C++23) | aview consisting of tuples of references to corresponding elements of the adapted views(class template)(customization point object)[edit] |