Класс 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 << 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 true, если элемент, на который указывает этот итератор, больше или равен элементу, на который указывает итератор other.
bool iterator::operator>(const iterator &other) const
bool iterator::operator>(const const_iterator &other) const
Возвращает true true, если элемент, на который указывает этот итератор, больше элемента, на который указывает итератор other.
bool iterator::operator<=(const iterator &other) const
bool iterator::operator<=(const const_iterator &other) const
Возвращает true 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(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.13/qlist-iterator.html