home | help
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 rep-
     resent 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 appropri-
     ate equality
	comparison operators operator==.

	std::common_iterator can be used as a "bridge" between sequences  repre-
     sented 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::com-
     mon_iterator
	(C++20) 					type
							(class template special-
     ization)

							provides  uniform inter-
     face to the
	std::iterator_traits<std::common_iterator>	properties of the
	(C++20) 					    std::common_iterator
     type
							(class template special-
     ization)

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",  "Alde-
     baran", "Sun"};

	  using IT = std::common_iterator<
			 std::counted_iterator<std::list<std::string>::itera-
     tor>,
			 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)

http://cppreference.com 	   2024.06.10		 std::common_iterator(3)

home | help