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

FreeBSD Manual Pages

  
 
  

home | help
std::ranges...w::iterator(3)  C++ Standard Libary std::ranges...w::iterator(3)

NAME
       std::ranges::iota_view::iterator	- std::ranges::iota_view::iterator

Synopsis
	  struct /*iterator*/;					    (1)	(since
       C++20)
									(expo-
       sition only*)
	  Helper alias templates
	  template< class I >					    (2)	(expo-
       sition only*)
	  using	/*iota-diff-t*/	= /* see below */;
	  Helper concepts
	  template< class I >

	  concept /*decrementable*/ =
	    std::incrementable<I> && requires(I	i) {		    (3)	(expo-
       sition only*)
	      {	--i } -> std::same_as<I&>;
	      {	i-- } -> std::same_as<I>;

	    };
	  template< class I >

	  concept /*advanceable*/ =
	    /*decrementable*/<I> && std::totally_ordered<I> &&
	    requires(I i, const	I j, const /*iota-diff-t*/<I> n) {
	      {	i += n } -> std::same_as<I&>;
	      {	i -= n } -> std::same_as<I&>;			    (4)	(expo-
       sition only*)
	      I(j + n);
	      I(n + j);
	      I(j - n);
	      {	j - j }	-> std::convertible_to</*iota-diff-t*/<I>>;

	    };

	  1) The return	type of	iota_view::begin.
	  2) The alias template	/*iota-diff-t*/	calculates the difference type
       for both
	  iterator types and integer-like types.
	    * If W is not an integral type, or if it is	an integral type and
	      sizeof(std::iter_difference_t<I>)	 is  greater  than  sizeof(I),
       then
	      /*iota-diff-t*/<I> is std::iter_difference_t<I>.
	    * Otherwise, /*iota-diff-t*/<I> is a signed	integer	type of	 width
       greater than the
	      width of I if such a type	exists.
	    *  Otherwise,  I  is one of	the widest integral types, and /*iota-
       diff-t*/<I> is an
	      unspecified signed-integer-like type of width not	less than  the
       width of	I. It
	      is  unspecified  whether /*iota-diff-t*/<I> models weakly_incre-
       mentable	in this
	      case.
	  3) The concept decrementable specifies that a	type is	incrementable,
       and pre-	and
	  post-	operator-- for the type	have common meaning.
	  4) The concept advanceable specifies that  a	type  is  both	decre-
       mentable	and
	  totally_ordered,  and	 operator+=, operator-=, operator+, and	opera-
       tor- among the type
	  and its different type have common meaning.

Member types
	  Member type	    Definition
			      *	std::random_access_iterator_tag	 if  W	models
       advanceable.
				Otherwise,
			      *	 std::bidirectional_iterator_tag  if  W	models
       decrementable.
	  iterator_concept	Otherwise,
			      *	std::forward_iterator_tag if W	models	incre-
       mentable.
				Otherwise,
			      *	std::input_iterator_tag.
	  iterator_category std::input_iterator_tag if W models	incrementable.
			    Otherwise,	there is no member type	iterator_cate-
       gory.
	  value_type	    W
	  difference_type   /*iota-diff-t*/<W>

	  Notes: /*iterator*/ is

	    * random_access_iterator if	W models advanceable,
	    * bidirectional_iterator if	W models decrementable,
	    * forward_iterator if W models incrementable, and
	    * input_iterator otherwise.

	  However, it only satisfies LegacyInputIterator if  W	models	incre-
       mentable, and does
	  not satisfy LegacyInputIterator otherwise.

	  Data members

	  Member name	   Definition
	  value_ (private) The value of	type W used for	dereferencing.
			   (exposition-only member object*)

Member functions
       std::ranges::iota_view::iterator::iterator

	  /*iterator*/() requires std::default_initializable<W>	= default; (1)
       (since C++20)
	  constexpr explicit /*iterator*/( W value );			   (2)
       (since C++20)

	  1)  Value  initializes the data member value_	via its	default	member
       initializer (=
	  W()).
	  2) Initializes the data member value_	with value. This value will be
       returned	by
	  operator* and	incremented by operator++.

       std::ranges::iota_view::iterator::operator*

	  constexpr  W	operator*()   const				(since
       C++20)
	      noexcept(std::is_nothrow_copy_constructible_v<W>);

	  Returns the current value, by	value (in other	words, this is a read-
       only view).

       std::ranges::iota_view::iterator::operator++

	  constexpr		    /*iterator*/&		 operator++();
       (1) (since C++20)
	  constexpr		      void		      operator++(int);
       (2) (since C++20)
	  constexpr	   /*iterator*/	       operator++(int)	      requires
       (3) (since C++20)
	  std::incrementable<W>;

	  1) Equivalent	to ++value_; return *this;.
	  2) Equivalent	to ++value_;.
	  3) Equivalent	to auto	tmp = *this; ++value_; return tmp;.

       std::ranges::iota_view::iterator::operator--

	  constexpr	   /*iterator*/&	 operator--()	      requires
       (1) (since C++20)
	  /*decrementable*/<W>;
	  constexpr	       /*iterator*/operator--(int)	      requires
       (2) (since C++20)
	  /*decrementable*/<W>;

	  1) Equivalent	to --value_; return *this;.
	  2) Equivalent	to auto	tmp = *this; --value_; return tmp;.

       std::ranges::iota_view::iterator::operator+=

	  constexpr /*iterator*/&  operator+=(	difference_type	 n  )	(since
       C++20)
	      requires /*advanceable*/<W>;

	  If  W	is unsigned-integer-like, performs value_ += static_cast<W>(n)
       if n is
	  non-negative,	value -= static_cast<W>(-n) otherwise,	and  then  re-
       turns *this.

	  Otherwise, equivalent	to value_ += n;	return *this;.

       std::ranges::iota_view::iterator::operator-=

	  constexpr  /*iterator*/&  operator-=(	 difference_type  n  )	(since
       C++20)
	      requires /*advanceable*/<W>;

	  If W is unsigned-integer-like, performs value_ -=  static_cast<W>(n)
       if n is
	  non-negative,	or value += static_cast<W>(-n) otherwise, and then re-
       turns *this.

	  Otherwise, equivalent	to value_ -= n;	return *this;.

       std::ranges::iota_view::iterator::operator[]

	  constexpr W operator[]( difference_type n ) const  (since C++20)
	      requires /*advanceable*/<W>;

	  Equivalent to	return W(value_	+ n);.

Non-member functions
       operator==, <, >, <=, >=, <=>(std::ranges::iota_view::iterator)

	  friend constexpr bool	operator== ( const /*iterator*/& x, const
	  /*iterator*/&				  y			     )
       (1) (since C++20)
	      requires std::equality_comparable<W>;
	  friend constexpr bool	operator<  ( const /*iterator*/& x, const
	  /*iterator*/&				 y			     )
       (2) (since C++20)
	      requires std::totally_ordered<W>;
	  friend constexpr bool	operator>  ( const /*iterator*/& x, const
	  /*iterator*/&				  y			     )
       (3) (since C++20)
	      requires std::totally_ordered<W>;
	  friend constexpr bool	operator<= ( const /*iterator*/& x, const
	  /*iterator*/&				 y			     )
       (4) (since C++20)
	      requires std::totally_ordered<W>;
	  friend constexpr bool	operator>= ( const /*iterator*/& x, const
	  /*iterator*/&				  y			     )
       (5) (since C++20)
	      requires std::totally_ordered<W>;
	  friend constexpr bool	operator<=>( const /*iterator*/& x, const
	  /*iterator*/&				 y			     )
       (6) (since C++20)
	      requires std::totally_ordered<W> &&
	  std::three_way_comparable<W>;

	  1) Equivalent	to return x.value_ == y.value_;.
	  2) Equivalent	to return x.value_ < y.value_;.
	  3) Equivalent	to return y < x;.
	  4) Equivalent	to return !(y <	x);.
	  5) Equivalent	to return !(x <	y);.
	  6) Equivalent	to return x.value_ <=> y.value_;.

	  The != operator is synthesized from operator==.

	  These	functions are not visible to ordinary unqualified or qualified
       lookup, and can
	  only be found	by argument-dependent lookup when iterator is an asso-
       ciated class of
	  the arguments.

       operator+(std::ranges::iota_view::iterator)

	  friend constexpr /*iterator*/	operator+( /*iterator*/	i,
	  difference_type			   n			     )
       (1) (since C++20)
	      requires /*advanceable*/<W>;
	  friend constexpr /*iterator*/	operator+( difference_type n,
	  /*iterator*/				 i			     )
       (2) (since C++20)
	      requires /*advanceable*/<W>;

	  Equivalent to	i += n;	return i;.

	  These	functions are not visible to ordinary unqualified or qualified
       lookup, and can
	  only be found	by argument-dependent lookup when iterator is an asso-
       ciated class of
	  the arguments.

       operator-(std::ranges::iota_view::iterator)

	  friend constexpr /*iterator*/	operator-( /*iterator*/	i,
	  difference_type			   n			     )
       (1) (since C++20)
	      requires /*advanceable*/<W>;
	  friend constexpr difference_type operator-( const /*iterator*/& x,

						      const  /*iterator*/&   y
       (2) (since C++20)
	  )

	      requires /*advanceable*/<W>;

	  1) Equivalent	to i -=	n; return i;.
	  2) Let D be difference_type.
	    *  If W is signed-integer-like, equivalent to return D(D(x.value_)
       - D(y.value_));.
	    * Otherwise, if W is unsigned-integer-like,	equivalent  to	return
       y.value_	>
	      x.value_ ? D(-D(y.value_ - x.value_)) : D(x.value_ - y.value_);.
	    * Otherwise, equivalent to return x.value_ - y.value_;.

	  These	functions are not visible to ordinary unqualified or qualified
       lookup, and can
	  only be found	by argument-dependent lookup when iterator is an asso-
       ciated class of
	  the arguments.

	  Defect reports

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

	     DR	    Applied  to	       Behavior	as published		  Cor-
       rect behavior
	  P2259R1  C++20      member  iterator_category	 is  always    defined
       only if W satisfies
			      defined					incre-
       mentable
	  LWG 3580 C++20      bodies of	operator+ and operator-	   made	 suit-
       able for	implicit
			      rule out implicit	move		   move

http://cppreference.com		  2024.06.10	  std::ranges...w::iterator(3)

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

home | help