Разница между std::iterator, std::iterator_traits, std::random_access_iterator_tagC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Разница между std::iterator, std::iterator_traits, std::random_access_iterator_tag

Сообщение Anonymous »

Мне нужно написать собственный итератор (с произвольным доступом) для моего пользовательского контейнера. И также необходимо повторно реализовать iterator_traits.
Я знаю, что std::iterator — это базовый класс для std::iterator_traits. Оба они являются классами. В то время как std::random_access_iterator_tag представляет собой структуру.
Моя первая попытка выглядит примерно так: (пример этой ссылки)

Код: Выделить всё

#include      // std::cout
#include      // std::iterator, std::input_iterator_tag

class MyIterator : public std::iterator
{
int* p;
public:
MyIterator(int* x) :p(x) {}
MyIterator(const MyIterator& mit) : p(mit.p) {}
MyIterator& operator++() {++p;return *this;}
MyIterator operator++(int) {MyIterator tmp(*this); operator++(); return tmp;}
bool operator==(const MyIterator& rhs) const {return p==rhs.p;}
bool operator!=(const MyIterator& rhs) const {return p!=rhs.p;}
int& operator*() {return *p;}
};
Но тогда я не знаю, куда поместить в картинку itator_traits ? Спасибо за ваше время!

Подробнее здесь: https://stackoverflow.com/questions/703 ... cess-itera
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»