Le Code de base pour un itérateur à accès aléatoire basé sur les pointeurs?

Je n'ai jamais mis en œuvre STL-comme les itérateurs et j'essaie de comprendre comment mettre en œuvre très simple basé sur les pointeurs. Une fois que j'aurai cette classe je vais être capable de le modifier pour faire plus de choses compliquées. Par conséquent, c'est une première étape, et j'en ai besoin pour être solide comme le roc pour comprendre comment écrire mon propre itérateurs (sans boost).

J'ai écrit le code suivant et je sais qu'il y a des erreurs. Pouvez-vous m'aider à concevoir correctement un Accès Aléatoire classe Iterator inspiré de :

template<Type> class Container<Type>::Iterator : public std::iterator<random_access_iterator_tag, Type>
{
//Lifecycle:
public:
Iterator() : _ptr(nullptr) {;}
Iterator(Type* rhs) : _ptr(rhs) {;}
Iterator(const Iterator &rhs) : _ptr(rhs._ptr) {;}
//Operators : misc
public:
inline Iterator& operator=(Type* rhs) {_ptr = rhs; return *this;}
inline Iterator& operator=(const Iterator &rhs) {_ptr = rhs._ptr; return *this;}
inline Iterator& operator+=(const int& rhs) {_ptr += rhs; return *this;}
inline Iterator& operator-=(const int& rhs) {_ptr -= rhs; return *this;}
inline Type& operator*() {return *_ptr;}
inline Type* operator->() {return _ptr;}
inline Type& operator[](const int& rhs) {return _ptr[rhs];}
//Operators : arithmetic
public:
inline Iterator& operator++() {++_ptr; return *this;}
inline Iterator& operator--() { --_ptr; return *this;}
inline Iterator& operator++(int) {Iterator tmp(*this); ++_ptr; return tmp;}
inline Iterator& operator--(int) {Iterator tmp(*this); --_ptr; return tmp;}
inline Iterator operator+(const Iterator& rhs) {return Iterator(_ptr+rhs.ptr);}
inline Iterator operator-(const Iterator& rhs) {return Iterator(_ptr-rhs.ptr);}
inline Iterator operator+(const int& rhs) {return Iterator(_ptr+rhs);}
inline Iterator operator-(const int& rhs) {return Iterator(_ptr-rhs);}
friend inline Iterator operator+(const int& lhs, const Iterator& rhs) {return Iterator(lhs+_ptr);}
friend inline Iterator operator-(const int& lhs, const Iterator& rhs) {return Iterator(lhs-_ptr);}
//Operators : comparison
public:
inline bool operator==(const Iterator& rhs) {return _ptr == rhs._ptr;}
inline bool operator!=(const Iterator& rhs) {return _ptr != rhs._ptr;}
inline bool operator>(const Iterator& rhs) {return _ptr > rhs._ptr;}
inline bool operator<(const Iterator& rhs) {return _ptr < rhs._ptr;}
inline bool operator>=(const Iterator& rhs) {return _ptr >= rhs._ptr;}
inline bool operator<=(const Iterator& rhs) {return _ptr <= rhs._ptr;}
//Data members
protected:
Type* _ptr;
};

Merci beaucoup.

Quelles erreurs? Les erreurs de compilation? L'éditeur de liens erreurs? Les erreurs d'exécution? Les erreurs de logiques? Quelque chose d'autre?
"Je sais qu'il y a des erreurs" -- est-ce une sorte de test? Je ne pense pas DONC est le bon site pour ça...
Un pointeur est un itérateur. Quel est le but de l'enveloppant avec une classe?
Le but est de comprendre comment appliquer correctement une classe iterator (notamment les signatures de fonction et de ce que la fonction n').
Eh bien, vous n'avez pas vraiment besoin public tous sur la place, mais comme vous n'avez pas de données membres en eux, il ne fait aucune différence. return Iterator(_ptr+rhs); en théorie crée un supplément temporaires inutiles, vous pouvez simplement return _ptr+rhs;.

OriginalL'auteur Vincent | 2012-08-23