Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

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
       represent a
	  non-common  range  (where  the  types	 of  I and S differ) as	a com-
       mon_range, by
	  containing either an iterator	or a sentinel, and defining the	appro-
       priate 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  com-
       mon_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 associ-
       ated difference
	  std::incrementable_traits<std::common_iterator>    type    of	   the
       std::common_iterator
	  (C++20)					  type
							  (class template spe-
       cialization)

							  provides uniform in-
       terface to the
	  std::iterator_traits<std::common_iterator>	  properties of	the
	  (C++20)					  std::common_iterator
       type
							  (class template spe-
       cialization)

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_itera-
       tor<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>::iter-
       ator>,
			   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)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=std::common_iterator&sektion=3&manpath=FreeBSD+Ports+15.1.quarterly>

home | help