Доброго времени суток! У меня есть класс для хранения двусвязного списка (аналог std::list), мне нужно написать класс-итератор перебирающий элементы списка при вызове оператора ++, для которого определены операторы * и →;
Для двусвязного списка вы можете реализовать двунаправленный итератор.
1) Нужен конструктор по умолчанию, копирующий конструктор и копирующий оператор присваивания.
Is default-constructible, copy-constructible, copy-assignable and destructible
X a;
X b(a);
b = a;
2) Должны быть определены операторы ==
и !=
Can be compared for equivalence using the equality/inequality operators (meaningful when both iterator values iterate over the same underlying sequence).
a == b
a != b
3) Должны быть определены операторы *
и ->
Can be dereferenced as an rvalue (if in a dereferenceable state).
*a
a->m
4) Для неконстантных итераторов должен быть определен оператор *
, который возвращает lvalue. Ссылку, например
For mutable iterators (non-constant iterators): Can be dereferenced as an lvalue (if in a dereferenceable state).
*a = t
5) Нужны постфиксный и префиксный операторы ++
Can be incremented (if in a dereferenceable state). The result is either also dereferenceable or a past-the-end iterator. Two iterators that compare equal, keep comparing equal after being both increased.
++a
a++
*a++
6) Нужны постфиксный и префиксный операторы --
Can be decremented (if a dereferenceable iterator value precedes it).
--a
a--
*a--
Таким образом, объявление вашего итератора будет выглядеть примерно так:
template<class T>
class List{
public:
class iterator : public std::iterator<std::bidirectional_iterator_tag, T>{
public:
iterator();
iterator(const iterator &other);
iterator& operator=(const iterator &other);
T &operator*() const;
T *operator->() const;
bool operator==(const iterator &other) const;
bool operator!=(const iterator &o) const;
iterator &operator++();
iterator operator++(int);
iterator &operator--();
iterator operator--(int);
};
};
Если что, можно подсмотреть как реализуют итератор другие люди
Виртуальный выделенный сервер (VDS) становится отличным выбором
Есть QTableWidget с двумя столбцами и 2 QGroupBox(объединенные по вертикали сплиттером)Таблица выполняет роль меню и, соответственно, не должна изменять...
В инвалидной программе используется функция _gettsПри использовании: #define UNICODE Компилятор начинает орать: '_getws' was not declared at this scope А если без...
Мне нужно массив или вектор без выхода за пределыЧто это такое? допустим Создаю вектор или массив на 10 символов типа int Все 10 элементов равны...
После удаления и попытки новой установки, выдаёт ошибку