Класс 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