Класс iterator
Класс iterator объявлен в классе QList.Класс QList::iterator предоставляет итератор в стиле STL для QList и QQueue. Непостоянный. Подробнее...
Публичные типы
| typedef | iterator_category |
Публичные функции
| iterator(const iterator &other) | |
| iterator() | |
| 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 имеет итераторы в стиле 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 << Qt::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 const_iterator &other) const
bool iterator::operator>=(const iterator &other) const
Возвращает true если элемент, на который указывает этот итератор, больше или равен элементу, на который указывает итератор other.
bool iterator::operator>(const const_iterator &other) const
bool iterator::operator>(const iterator &other) const
Возвращает true если элемент, на который указывает этот итератор, больше элемента, на который указывает итератор other.
bool iterator::operator<=(const const_iterator &other) const
bool iterator::operator<=(const iterator &other) const
Возвращает true если элемент, на который указывает этот итератор, меньше или равен элементу, на который указывает итератор other.
bool iterator::operator<(const const_iterator &other) const
bool iterator::operator<(const iterator &other) const
Возвращает true если элемент, на который указывает этот итератор, меньше элемента, на который указывает итератор other.
bool iterator::operator!=(const const_iterator &other) const
bool iterator::operator!=(const iterator &other) const
Возвращает true если other указывает на другой элемент, чем этот итератор; в противном случае возвращает false.
См. также operator==().
bool iterator::operator==(const const_iterator &other) const
bool iterator::operator==(const iterator &other) const
Возвращает true если other указывает на тот же элемент, что и этот итератор; в противном случае возвращает false.
См. также operator!=().
iterator::iterator(const iterator &other)
Создаёт копию other.
iterator::iterator()
Создаёт неинициализированный итератор.
Функции, подобные operator*() и operator++(), не должны вызываться для неинициализированного итератора. Используйте operator=() для присваивания значения перед использованием.
См. также QList::begin() и QList::end().
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/qt-5.14/qlist-iterator.html