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

FreeBSD Manual Pages

  
 
  

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

NAME
       std::iterator - std::iterator

Synopsis
	  Defined in header <iterator>
	  template<

	      class Category,
	      class T,
	      class Distance = std::ptrdiff_t,	(deprecated in C++17)
	      class Pointer = T*,
	      class Reference =	T&

	  > struct iterator;

	  std::iterator	 is the	base class provided to simplify	definitions of
       the required
	  types	for iterators.

Template parameters
	  Category  - the category of the iterator. Must be  one  of  iterator
       category	tags.
	  T	     - the type	of the values that can be obtained by derefer-
       encing the
		      iterator.	This type should be void for output iterators.
	  Distance  - a	type that can be used to identify distance between it-
       erators
	  Pointer   - defines a	pointer	to the type iterated over (T)
	  Reference - defines a	reference to the type iterated over (T)

Member types
	  Member type	    Definition
	  iterator_category Category
	  value_type	    T
	  difference_type   Distance
	  pointer	    Pointer
	  reference	    Reference

Example
	  The following	example	shows how to implement an  input  iterator  by
       inheriting from
	  std::iterator

       // Run this code

	#include <algorithm>
	#include <iostream>

	template<long FROM, long TO>
	class Range
	{
	public:
	    // member typedefs provided	through	inheriting from	std::iterator
	    class iterator : public std::iterator<
					std::input_iterator_tag,   //	itera-
       tor_category
					long,			 // value_type
					long,			  //   differ-
       ence_type
					const long*,		 // pointer
					long			 // reference
				    > {
		long num = FROM;
	    public:
		explicit iterator(long _num = 0) : num(_num) {}
		iterator&  operator++()	{ num =	TO >= FROM ? num + 1: num - 1;
       return *this; }
		iterator operator++(int) { iterator retval = *this; ++(*this);
       return retval; }
		bool  operator==(iterator  other)  const  {  return   num   ==
       other.num; }
		bool  operator!=(iterator  other)  const  {  return !(*this ==
       other); }
		reference operator*() const { return num; }
	    };
	    iterator begin() { return iterator(FROM); }
	    iterator end() { return iterator(TO	>= FROM? TO + 1	: TO - 1); }
	};

	int main()
	{
	    // std::find requires an input iterator
	    auto range = Range<15, 25>();
	    auto itr = std::find(range.begin(),	range.end(), 18);
	    std::cout << *itr << '\n'; // 18

	    // Range::iterator also satisfies range-based for requirements
	    for	(long l	: Range<3, 5>())
		std::cout << l << ' '; // 3 4 5
	    std::cout << '\n';
	}

Output:
	18
	3 4 5

See also
				     provides uniform interface	to the proper-
       ties of an
	  iterator_traits	     iterator
				     (class template)
	  input_iterator_tag
	  output_iterator_tag
	  forward_iterator_tag	     empty class types used to indicate	itera-
       tor categories
	  bidirectional_iterator_tag (class)
	  random_access_iterator_tag
	  contiguous_iterator_tag
	  (C++20)

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

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

home | help