std::common_iterator
From cppreference.com
Defined in header <iterator> | ||
template<std::input_or_output_iterator I, std::sentinel_for<I> S > requires (!std::same_as<I, S>&&std::copyable<I>) | (since C++20) | |
std::common_iterator
is an iterator I
/ sentinel S
adaptor that may represent a non-common range (where the types of I
and S
differ) as a common_range
, by containing either an iterator or a sentinel, and defining the appropriate equality comparison operators operator==.
std::common_iterator
can be used as a "bridge" between sequences represented by iterator/sentinel pair and legacy functions that expect common_range
-like sequences.
Contents |
[edit]Data members
Member name | Definition |
var | an object of type std::variant<I, S> (exposition-only member object*) |
[edit]Member functions
constructs a new common_iterator (public member function) | |
assigns another common_iterator (public member function) | |
accesses the pointed-to element (public member function) | |
advances the common_iterator (public member function) |
[edit]Non-member functions
(C++20) | compares the underlying iterators or sentinels (function template) |
(C++20) | computes the distance between two iterator adaptors (function template) |
(C++20) | casts the result of dereferencing the underlying iterator to its associated rvalue reference type (function) |
(C++20) | swaps the objects pointed to by two underlying iterators (function template) |
[edit]Helper classes
computes the associated difference type of the std::common_iterator type (class template specialization) | |
provides uniform interface to the properties of the std::common_iterator type (class template specialization) |
[edit]Example
Run this code
#include <algorithm>#include <iostream>#include <iterator>#include <list>#include <string> template<class ForwardIter>void fire(ForwardIter first, ForwardIter last){std::copy(first, last, std::ostream_iterator<std::string>{std::cout, " "});} int main(){std::list<std::string> stars{"Pollux", "Arcturus", "Mira", "Aldebaran", "Sun"}; using IT = std::common_iterator<std::counted_iterator<std::list<std::string>::iterator>, std::default_sentinel_t>; fire(IT(std::counted_iterator(stars.begin(), stars.size()-1)), IT(std::default_sentinel));}
Output:
Pollux Arcturus Mira Aldebaran
[edit]References
- C++23 standard (ISO/IEC 14882:2024):
- 23.5.5 Common iterators [iterators.common]
- C++20 standard (ISO/IEC 14882:2020):
- 23.5.4 Common iterators [iterators.common]
[edit]See also
(C++20) | specifies that a range has identical iterator and sentinel types (concept) |
converts a view into a common_range (class template)(range adaptor object) |