Spec-Zone.ru › Qt 5.11

Класс iterator

(QList::iterator)

Класс QList::iterator предоставляет итератор в стиле STL, не являющийся константным, для QList и QQueue. Подробнее...

Заголовок: #include <iterator>
qmake: QT += core
  • Список всех членов, включая наследуемые

Типы public

typedef iterator_category

Функции public

iterator()
iterator(const iterator &other)
bool operator!=(const iterator &other) const
bool operator!=(const const_iterator &other) const
T & operator*() const
iterator operator+(iterator::difference_type j) const
iterator & operator++()
iterator operator++(int)
iterator & operator+=(iterator::difference_type j)
iterator operator-(iterator::difference_type j) const
int operator-(iterator other) const
iterator & operator--()
iterator operator--(int)
iterator & operator-=(iterator::difference_type j)
T * operator->() const
bool operator<(const iterator &other) const
bool operator<(const const_iterator &other) const
bool operator<=(const iterator &other) const
bool operator<=(const const_iterator &other) const
bool operator==(const iterator &other) const
bool operator==(const const_iterator &other) const
bool operator>(const iterator &other) const
bool operator>(const const_iterator &other) const
bool operator>=(const iterator &other) const
bool operator>=(const const_iterator &other) const
T & operator[](iterator::difference_type j) const

Подробное описание

Класс QList::iterator предоставляет итератор в стиле STL, не являющийся константным, для QList и QQueue.

QList имеет итераторы в стиле STL и Java. Итераторы в стиле STL более низкого уровня и сложнее в использовании, но немного быстрее. Для разработчиков, знакомых со STL, они обладают преимуществом привычности.

QList<T>::iterator позволяет перебирать QList<T> (или QQueue<T>) и изменять элементы списка, связанные с итератором. Если нужно перебрать константный QList, используйте QList::const_iterator вместо этого. В целом, рекомендуется использовать QList::const_iterator даже для неконстантных QList, если нет необходимости изменять QList с помощью итератора. Константные итераторы немного быстрее и улучшают читаемость кода.

Итератор QList::iterator по умолчанию создаёт неинициализированный итератор. Перед началом перебора его нужно инициализировать, используя функцию QList, например, QList::begin(), QList::end() или QList::insert(). Вот типичный цикл, печатающий все элементы списка:

QList<QString> list;
list.append("January");
list.append("February");
...
list.append("December");

QList<QString>::iterator i;
for (i = list.begin(); i != list.end(); ++i)
    cout << *i << endl;

Рассмотрим примеры операций с QList::iterator, недоступные для QList::const_iterator. Вот пример увеличения каждого значения в QList<int> на 2:

QList<int>::iterator i;
for (i = list.begin(); i != list.end(); ++i)
    *i += 2;

Большинство функций QList принимают целочисленный индекс, а не итератор. По этой причине итераторы редко используются с QList. Итераторы в стиле STL полезны в качестве аргументов для общих алгоритмов.

Например, вот как удалить все виджеты из QList<QWidget *>:

QList<QWidget *> list;
...
qDeleteAll(list.begin(), list.end());

Можно использовать несколько итераторов для одного списка. Однако помните, что любое обращение к неконстантной функции QList сделает все существующие итераторы неопределёнными. Если нужно сохранить итераторы на долгое время, рекомендуется использовать QLinkedList вместо QList.

Предупреждение: Итераторы неявно разделяемых контейнеров работают не совсем как итераторы STL. Следует избегать копирования контейнера, пока на нём активны итераторы. Для получения дополнительной информации см. Проблемы итераторов при неявном совместном использовании.

См. также QList::const_iterator и QMutableListIterator.

Документация по типам членов

typedef iterator::iterator_category

Синоним для std::random_access_iterator_tag, указывающий, что этот итератор — итератор произвольного доступа.

Документация по функциям членов

bool iterator::operator>=(const iterator &other) const

bool iterator::operator>=(const const_iterator &other) const

Возвращает true если элемент, на который указывает этот итератор, больше или равен элементу, на который указывает итератор other.

bool iterator::operator>(const iterator &other) const

bool iterator::operator>(const const_iterator &other) const

Возвращает true если элемент, на который указывает этот итератор, больше элемента, на который указывает итератор other.

bool iterator::operator<=(const iterator &other) const

bool iterator::operator<=(const const_iterator &other) const

Возвращает true если элемент, на который указывает этот итератор, меньше или равен элементу, на который указывает итератор other.

bool iterator::operator<(const iterator &other) const

bool iterator::operator<(const const_iterator &other) const

Возвращает true , если элемент, на который указывает этот итератор, меньше элемента, на который указывает итератор other.

bool iterator::operator!=(const iterator &other) const

bool iterator::operator!=(const const_iterator &other) const

Возвращает true, если other указывает на другой элемент, чем этот итератор; в противном случае возвращает false.

См. также operator==().

bool iterator::operator==(const iterator &other) const

bool iterator::operator==(const const_iterator &other) const

Возвращает true , если other указывает на тот же элемент, что и этот итератор; в противном случае возвращает false.

См. также operator!=().

iterator::iterator()

Создаёт неинициализированный итератор.

Функции вроде operator*() и operator++() не должны вызываться для неинициализированного итератора. Используйте operator=() для присвоения значения перед его использованием.

См. также QList::begin() и QList::end().

iterator::iterator(const iterator &other)

Создаёт копию other.

T &iterator::operator*() const

Возвращает изменяемую ссылку на текущий элемент.

Вы можете изменить значение элемента, используя operator*() слева от оператора присваивания, например:

if (*it == "Hello")
    *it = "Bonjour";

См. также operator->().

iterator iterator::operator+(iterator::difference_type j) const

Возвращает итератор к элементу, находящемуся на j позиций вперёд от этого итератора. (Если j отрицательное, итератор перемещается назад.)

См. также operator-() и operator+=().

iterator &iterator::operator++()

Префиксный оператор ++ (++it) перемещает итератор к следующему элементу в списке и возвращает итератор к новому текущему элементу.

Вызов этой функции для QList::end() приведёт к неопределённым результатам.

См. также operator--().

iterator iterator::operator++(int)

Это перегруженная функция.

Постфиксный оператор ++ (it++) перемещает итератор к следующему элементу в списке и возвращает итератор к предыдущему текущему элементу.

iterator &iterator::operator+=(iterator::difference_type j)

Перемещает итератор на j элементов вперёд. (Если j отрицательное, итератор перемещается назад.)

См. также operator-=() и operator+().

iterator iterator::operator-(iterator::difference_type j) const

Возвращает итератор к элементу, находящемуся на j позиций назад от этого итератора. (Если j отрицательное, итератор перемещается вперёд.)

См. также operator+() и operator-=().

int iterator::operator-(iterator other) const

Возвращает количество элементов между элементом, на который указывает other, и элементом, на который указывает этот итератор.

iterator &iterator::operator--()

Префиксный оператор -- (--it) делает предыдущий элемент текущим и возвращает итератор к новому текущему элементу.

Вызов этой функции для QList::begin() приведёт к неопределённым результатам.

См. также operator++().

iterator iterator::operator--(int)

Это перегруженная функция.

Постфиксный оператор -- (it--) делает предыдущий элемент текущим и возвращает итератор к предыдущему текущему элементу.

iterator &iterator::operator-=(iterator::difference_type j)

Перемещает итератор назад на j элементов. (Если j отрицательное, итератор перемещается вперёд.)

См. также operator+=() и operator-().

T *iterator::operator->() const

Возвращает указатель на текущий элемент.

См. также operator*().

T &iterator::operator[](iterator::difference_type j) const

Возвращает изменяемую ссылку на элемент в позиции *this + j.

Эта функция предоставляется для того, чтобы итераторы QList вели себя как указатели C++.

См. также operator+().

© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/archives/qt-5.11/qlist-iterator.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API