Scroll to navigation

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