Compare this with ISO/IEC 14882:1998(E) section 24.1.5 Random access iterators

#include <iterator>

//******************************************************************************
//******************************************************************************
//******************************************************************************
// svector_iter
template <typename T>
class svector_iter : public std::iterator<std::random_access_iterator_tag, T>
{
  public:
      // For our use
    typedef std::random_access_iterator_tag iterator_category;
    typedef T value_type;
    typedef ptrdiff_t difference_type;
    typedef T* pointer;
    typedef T& reference;

      // Forward iterator requirements
    svector_iter();
    // *** default copy constructor    ***
    // *** default destructor          ***
    bool operator==(const svector_iter &rhs) const;
    bool operator!=(const svector_iter &rhs) const;
    // *** default assignment operator ***
    reference operator*(void) const;
    pointer operator->(void) const;
    svector_iter& operator++(void);
    svector_iter operator++(int);

      // Bi-directional iterator requirements
    svector_iter& operator--(void);
    svector_iter operator--(int);

      // Random-access iterator requirements
    svector_iter& operator+=(int rhs);
    svector_iter operator+(int rhs) const;
    svector_iter& operator-=(int rhs);
    svector_iter operator-(int rhs) const;
    difference_type operator-(const svector_iter& rhs) const;
    reference operator[](difference_type index) const;
    bool operator<(const svector_iter& rhs) const;
    bool operator>(const svector_iter& rhs) const;
    bool operator<=(const svector_iter& rhs) const;
    bool operator>=(const svector_iter& rhs) const;

      // Used internally
    svector_iter(pointer);  // conversion constructor
  private:
    pointer elem_ptr_;  // A pointer to some element
};

//******************************************************************************
//******************************************************************************
//******************************************************************************
// const_svector_iter
template <typename T>
class const_svector_iter : public std::iterator<std::random_access_iterator_tag, T>
{
  public:
      // For our use
    typedef std::random_access_iterator_tag iterator_category;
    typedef T value_type;
    typedef ptrdiff_t difference_type;
    typedef const T* pointer;
    typedef const T& reference;

      // Forward iterator requirements
    const_svector_iter();    // default constructor
    // *** default copy constructor    ***
    // *** default destructor          ***
    bool operator==(const const_svector_iter &rhs) const;
    bool operator!=(const const_svector_iter &rhs) const;
    // *** default assignment operator ***
    reference operator*(void) const;
    pointer operator->(void) const;
    const_svector_iter& operator++(void);
    const_svector_iter operator++(int);

      // Bi-directional iterator requirements
    const_svector_iter& operator--(void);
    const_svector_iter operator--(int);

      // Random-access iterator requirements
    const_svector_iter& operator+=(int);
    const_svector_iter operator+(int) const;
    const_svector_iter& operator-=(int);
    const_svector_iter operator-(int) const;
    difference_type operator-(const const_svector_iter& rhs) const;
    reference operator[](difference_type index) const;
    bool operator<(const const_svector_iter& rhs) const;
    bool operator>(const const_svector_iter& rhs) const;
    bool operator<=(const const_svector_iter& rhs) const;
    bool operator>=(const const_svector_iter& rhs) const;

      // Used internally
    const_svector_iter(pointer);  // conversion constructor
  private:
    pointer elem_ptr_;  // A pointer to some element
};