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

FreeBSD Manual Pages

  
 
  

home | help
std::counted_iterator(3)      C++ Standard Libary     std::counted_iterator(3)

NAME
       std::counted_iterator - std::counted_iterator

Synopsis
	  Defined in header <iterator>
	  template< std::input_or_output_iterator I >  (since C++20)
	  class	counted_iterator;

	  std::counted_iterator	 is  an	iterator adaptor which behaves exactly
       like the
	  underlying iterator, except that it keeps track of the  distance  to
       the end of its
	  range.  This	iterator is equal to std::default_sentinel if and only
       if its count
	  reaches zero.

Member types
	  Member type	    Definition
	  iterator_type	    I
	  value_type	    std::iter_value_t<I> if I models  indirectly_read-
       able; otherwise,
			    not	defined
	  difference_type   std::iter_difference_t<I>
	  iterator_concept  I::iterator_concept	if present; otherwise, not de-
       fined
	  iterator_category  I::iterator_category  if  present;	otherwise, not
       defined

Member objects
	  Member name	    Definition
	  current (private) the	underlying iterator which base() accesses
			    (exposition-only member object*)
			    the	distance between the underlying	 iterator  and
       the end of its
	  length (private)  range
			    (exposition-only member object*)

Member functions
	  constructor	  constructs a new iterator adaptor
	  (C++20)	  (public member function)
	  operator=	  assigns another iterator adaptor
	  (C++20)	  (public member function)
	  base		  accesses the underlying iterator
	  (C++20)	  (public member function)
	  count		  returns the distance to the end
	  (C++20)	  (public member function)
	  operator*	  accesses the pointed-to element
	  operator->	  (public member function)
	  (C++20)
	  operator[]	  accesses an element by index
	  (C++20)	  (public member function)
	  operator++
	  operator++(int)
	  operator+=
	  operator+	  advances or decrements the iterator
	  operator--	  (public member function)
	  operator--(int)
	  operator-=
	  operator-
	  (C++20)

Non-member functions
	  operator==			     compares the distances to the end
	  operator<=>			     (function template)
	  (C++20)
	  operator==(std::default_sentinel)  checks if the distance to the end
       is equal	to 0
	  (C++20)			     (function template)
	  operator+			     advances the iterator
	  (C++20)			     (function template)
	  operator-			     computes the distance between two
       iterator
	  (C++20)			     adaptors
					     (function template)
	  operator-(std::default_sentinel_t)  computes	the signed distance to
       the end
	  (C++20)			     (function template)
	  iter_move			     casts the result of dereferencing
       the underlying
	  (C++20)			     iterator to its associated	rvalue
       reference type
					     (function)
	  iter_swap			     swaps the objects pointed	to  by
       two underlying
	  (C++20)			     iterators
					     (function template)

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

Example
       // Run this code

	#include <algorithm>
	#include <iostream>
	#include <iterator>
	#include <string>
	#include <vector>

	using std::operator""s;

	void print(auto	const remark, auto const& v)
	{
	    const auto size = std::ssize(v);
	    std::cout << remark	<< '[' << size << "] { ";
	    for	(auto it = std::counted_iterator{std::cbegin(v), size};
		 it != std::default_sentinel; ++it)
		std::cout << *it << (it.count()	> 1 ? ", " : " ");
	    std::cout << "}\n";
	}

	int main()
	{
	    const   auto   src	 =  {"Arcturus"s,  "Betelgeuse"s,  "Canopus"s,
       "Deneb"s, "Elnath"s};
	    print("src", src);
	    std::vector<decltype(src)::value_type> dst;
	    std::ranges::copy(std::counted_iterator{src.begin(), 3},
			      std::default_sentinel,
			      std::back_inserter(dst));
	    print("dst", dst);
	}

Output:
	src[5] { Arcturus, Betelgeuse, Canopus,	Deneb, Elnath }
	dst[3] { Arcturus, Betelgeuse, Canopus }

	  Defect reports

	  The following	behavior-changing defect reports were applied retroac-
       tively to
	  previously published C++ standards.

	    DR	  Applied to	  Behavior as published		       Correct
       behavior
			     member  typedefs are not provided member typedefs
       are added to
			     std::incrementable_traits	      account for  it-
       erator_traits fix
	  P2259R1 C++20	     is	specialized for		      redundant
			     counted_iterator			   std::incre-
       mentable_traits
							      specialization
       is removed

See also
	  default_sentinel_t default sentinel for use with iterators that know
       the bound of
	  (C++20)	     their range
			     (class)
	  views::counted     creates a subrange	from an	iterator and a count
	  (C++20)	     (customization point object)
	  ranges::take_view  a view consisting of the first N elements of  an-
       other view
	  views::take	     (class template) (range adaptor object)
	  (C++20)

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

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

home | help