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  cate-
     gory tags.
	T	  - the type of the values that can be obtained by dereferencing
     the
		    iterator. This type should be void for output iterators.
	Distance   - a type that can be used to identify distance between itera-
     tors
	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 inher-
     iting 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, // iterator_cate-
     gory
				      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; re-
     turn *this; }
	      iterator operator++(int) { iterator retval = *this; ++(*this); re-
     turn 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 properties
     of an
	iterator_traits 	   iterator
				   (class template)
	input_iterator_tag
	output_iterator_tag
	forward_iterator_tag	   empty class types used to  indicate	iterator
     categories
	bidirectional_iterator_tag (class)
	random_access_iterator_tag
	contiguous_iterator_tag
	(C++20)

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

home | help