| (1) | (since C++20) |
constexpr common_iterator( I i); | (2) | (since C++20) |
constexpr common_iterator( S s); | (3) | (since C++20) |
| (4) | (since C++20) |
| | |
Constructs a new iterator adaptor, effectively initializes the underlyingstd::variant<I, S> member objectvar to hold anI (iterator) orS (sentinel) object.
1) Default constructor. Default-initializesvar. After construction,var holds a value-initializedI object.Operations on the resulting iterator adaptor have defined behavior if and only if the corresponding operations on a value-initializedI also have defined behavior.
2) After construction,var holds anI object move-constructed fromi.
3) After construction,var holds anS object move-constructed froms.
4) After construction,var holds anI orS object initialized from theI2 orS2 held byx.var, ifx.var holds that alternative, respectively. The behavior is undefined ifx is in an invalid state, that is,x.var.valueless_by_exception() is equal totrue.
[edit]Parameters
| i | - | iterator to adapt |
| s | - | sentinel to adapt |
| x | - | iterator adaptor to copy |
[edit]Example
#include <algorithm>#include <iostream>#include <iterator>#include <numeric>#include <vector> int main(){std::vector v{3,1,4,1,5,9,2}; using CI=std::common_iterator<std::counted_iterator<std::vector<int>::iterator>,std::default_sentinel_t>; CI unused;// (1) CI start{std::counted_iterator{std::next(begin(v)), ssize(v)-2}};// (2) CI finish{std::default_sentinel};// (3) CI first{start};// (4) CI last{finish};// (4) std::copy(first, last,std::ostream_iterator<int>{std::cout," "});std::cout<<'\n'; std::common_iterator<std::counted_iterator<std::ostream_iterator<double>>,std::default_sentinel_t> beg{std::counted_iterator{std::ostream_iterator<double>{std::cout,"; "},5}}, end{std::default_sentinel};std::iota(beg, end,3.1);std::cout<<'\n';}Output:
1 4 1 5 93.1; 4.1; 5.1; 6.1; 7.1;
[edit]See also
| assigns anothercommon_iterator (public member function)[edit] |