table of contents
std::common_iterator(3) | C++ Standard Libary | std::common_iterator(3) |
NAME¶
std::common_iterator - std::common_iterator
Synopsis¶
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)
class common_iterator;
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.
Member functions¶
constructor constructs a new iterator adaptor
(C++20) (public member function)
operator= assigns another iterator adaptor
(C++20) (public member function)
operator* accesses the pointed-to element
operator-> (public member function)
(C++20)
operator++ advances the iterator adaptor
operator++(int) (public member function)
(C++20)
Non-member functions¶
operator== compares the underlying iterators or sentinels
(C++20) (function template)
operator- computes the distance between two iterator adaptors
(C++20) (function template)
iter_move casts the result of dereferencing the underlying iterator to its
(C++20) associated rvalue reference type
(function)
iter_swap swaps the objects pointed to by two underlying iterators
(C++20) (function template)
Helper classes¶
computes the associated difference
std::incrementable_traits<std::common_iterator> type of the
std::common_iterator
(C++20) type
(class template specialization)
provides uniform interface to the
std::iterator_traits<std::common_iterator> properties of the
(C++20) std::common_iterator type
(class template specialization)
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
References¶
* C++23 standard (ISO/IEC 14882:2023):
* 23.5.5 Common iterators [iterators.common]
* C++20 standard (ISO/IEC 14882:2020):
* 23.5.4 Common iterators [iterators.common]
See also¶
ranges::common_range specifies that a range has identical
iterator and sentinel
(C++20) types
(concept)
ranges::common_view converts a view into a common_range
views::common (class template) (range adaptor object)
(C++20)
2024.06.10 | http://cppreference.com |