| ||||||||||||||||||||||
| Range primitives | |||||||
| |||||||
| Range concepts | |||||||||||||||||||
| |||||||||||||||||||
| Range factories | |||||||||
| |||||||||
| Range adaptors | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Helper items | |||||||||||||||||
| |||||||||||||||||
template<bool Const> class/*iterator*/ | (1) | (exposition only*) |
Helper concepts | ||
template<bool Const,class...Rs> concept/*concat-is-random-access*/=/* see description */; | (2) | (exposition only*) |
template<bool Const,class...Rs> concept/*concat-is-bidirectional*/=/* see description */; | (3) | (exposition only*) |
iterator is the type of the iterators returned bybegin() andend() ofranges::concat_view<Views...>.Fs be the pack that consists of all elements ofRs except the last element. Equivalent totemplate<bool Const,class...Rs>
concept concat-is-random-access =// exposition only all-random-access <Const, Rs...>&& (ranges::common_range<maybe-const <Const, Fs>>&& ...);
Fs be the pack that consists of all elements ofRs except the last element. Equivalent totemplate<bool Const,class...Rs>
concept concat-is-bidirectional =// exposition only all-bidirectional <Const, Rs...>&& (ranges::common_range<maybe-const <Const, Fs>>&& ...);
Contents |
| Const | - | whether the iterator is a constant iterator |
Exposition-only types | |
| Type | Definition |
base-iter | std::variant<ranges::iterator_t<maybe-const <Const, Views>>...>(exposition-only member type*) |
Iterator property types | |
| Type | Definition |
iterator_concept | aniterator tag,see below |
iterator_category(conditionally present) | an iterator tag,see below |
value_type | concat-value-t <maybe-const <Const, Views>...> |
difference_type | std::common_type_t<ranges::range_difference_t< |
iterator_concept is defined as follows:
concat-is-random-access <Const, Views...> is modeled,iterator_concept denotesstd::random_access_iterator_tag.concat-is-bidirectional <Const, Views...> is modeled,iterator_concept denotesstd::bidirectional_iterator_tag.all-forward <Const, Views...> is modeled,iterator_concept denotesstd::forward_iterator_tag.iterator_concept denotesstd::input_iterator_tag.iterator_category is defined if and only ifall-forward <Const, Views...> is modeled. In this case, it is defined as follows:
concat-reference-t <maybe-const <Const, Views>...>> isfalse,iterator_category denotesstd::input_iterator_tag.Cs denote the pack of typesstd::iterator_traits<ranges::iterator_t<maybe-const <Const, Views>>>::iterator_category...: concat-is-random-access <Const, Views...> istrue,iterator_category denotesstd::random_access_iterator_tag. concat-is-bidirectional <Const, Views...> istrue,iterator_category denotesstd::bidirectional_iterator_tag.iterator_category denotesstd::forward_iterator_tag.iterator_category denotesstd::input_iterator_tag.| Member | Definition |
maybe-const <Const,ranges::concat_view>*parent_ | a pointer to the parentconcat_view(exposition-only member object*) |
base-iterit_ | an iterator into the current view (exposition-only member object*) |
| constructs an iterator (public member function) | |
| accesses the element (public member function) | |
| accesses an element by index (public member function) | |
| advances or decrements the underlying iterator (public member function)[edit] | |
Exposition-only function templates | |
replacesit_ with the beginning of the next view, ifit_ is the end of current view(exposition-only member function*) | |
decrementsit_ such that it points to the previous position(exposition-only member function*) | |
| advances the current position on given offset (exposition-only member function*) | |
| decrements the current position on given value (exposition-only member function*) | |
| compares the underlying iterators (function) | |
(C++26) | performs iterator arithmetic (function) |
(C++26) | casts the result of dereferencing the underlying iterator to its associated rvalue reference type (function) |
(C++26) | swaps the objects pointed to by two underlying iterators (function) |
The preliminary version can be checked out onCompiler Explorer.
#include <iostream>#include <iterator>#include <ranges> int main(){namespace views= std::views;staticconstexprint p[]{1,2,3};staticconstexprauto e={4,5};auto t=views::iota(6,9);auto cat=views::concat(p, e, t);auto dog=views::concat(cat, cat);for(auto i{dog.begin()}; i!=std::default_sentinel;++i)std::cout<<*i<<' ';std::cout<<'\n';}
Output:
1 2 3 4 5 6 7 8 1 2 3 4 5 6 7 8
concat_view::iterator [range.concat.iterator]