Класс iterator
класс QLinkedList::iteratorКласс QLinkedList::iterator предоставляет итератор в стиле STL, не являющийся константным, для QLinkedList. Подробнее...
Открытые функции
| iterator() | |
| bool | operator!=(const iterator &other) const |
| bool | operator!=(const const_iterator &other) const |
| T & | operator*() const |
| iterator | operator+(int j) const |
| iterator & | operator++() |
| iterator | operator++(int) |
| iterator & | operator+=(int j) |
| iterator | operator-(int j) const |
| iterator & | operator--() |
| iterator | operator--(int) |
| iterator & | operator-=(int j) |
| T * | operator->() const |
| bool | operator==(const iterator &other) const |
| bool | operator==(const const_iterator &other) const |
Подробное описание
QLinkedList использует как итераторы в стиле STL, так и итераторы в стиле Java. Итераторы в стиле STL более низкого уровня и сложнее в использовании, но они немного быстрее, и для разработчиков, знакомых со STL, они обладают преимуществом привычности.
QLinkedList<T>::iterator позволяет итерироваться по QLinkedList<T> и изменять элемент списка, связанный с итератором. Если нужно итерироваться по константной QLinkedList, используйте QLinkedList::const_iterator вместо этого. Обычно рекомендуется использовать QLinkedList::const_iterator и с неконстантными QLinkedList, если только вам не требуется изменение QLinkedList через итератор. Константные итераторы немного быстрее и могут улучшить читаемость кода.
Конструктор QLinkedList::iterator по умолчанию создаёт неинициализированный итератор. Необходимо его инициализировать, используя функцию, такую как QLinkedList::begin(), QLinkedList::end() или QLinkedList::insert(), прежде чем начинать итерирование. Вот типичный цикл, который выводит все элементы, хранящиеся в списке:
QLinkedList<QString> list;
list.append("January");
list.append("February");
...
list.append("December");
QLinkedList<QString>::iterator i;
for (i = list.begin(); i != list.end(); ++i)
cout << *i << Qt::endl; Итераторы в стиле STL могут использоваться в качестве аргументов для обобщённых алгоритмов. Например, вот как найти элемент в списке:
QLinkedList<QString> list;
...
QLinkedList<QString>::iterator it = std::find(list.begin(),
list.end(), "Joel");
if (it != list.end())
cout << "Found Joel" << Qt::endl; Давайте рассмотрим несколько примеров того, что мы можем сделать с QLinkedList::iterator, но не можем сделать с QLinkedList::const_iterator. Вот пример, который увеличивает каждое значение, хранящееся в QLinkedList<int>, на 2:
QLinkedList<int>::iterator i;
for (i = list.begin(); i != list.end(); ++i)
*i += 2; Вот пример, который удаляет все элементы, начинающиеся с символа подчёркивания, из QLinkedList<QString>:
QLinkedList<QString> list;
...
QLinkedList<QString>::iterator i = list.begin();
while (i != list.end()) {
if ((*i).startsWith('_'))
i = list.erase(i);
else
++i;
} Вызов QLinkedList::erase() удаляет элемент, на который указывает итератор, из списка и возвращает итератор на следующий элемент. Вот другой способ удаления элемента во время итерирования:
QLinkedList<QString>::iterator i = list.begin();
while (i != list.end()) {
QLinkedList<QString>::iterator previous = i;
++i;
if ((*previous).startsWith('_'))
list.erase(previous);
} Может возникнуть желание написать код подобный этому:
// WRONG
while (i != list.end()) {
if ((*i).startsWith('_'))
list.erase(i);
++i;
} Однако это может привести к сбою в ++i, потому что i является висячим итератором после вызова erase().
Несколько итераторов могут использоваться для одного списка. Если вы добавляете элементы в список, существующие итераторы останутся валидными. Если вы удаляете элементы из списка, итераторы, указывающие на удалённые элементы, станут висячими.
Предупреждение: Итераторы для неявно разделяемых контейнеров работают не совсем как итераторы STL. Следует избегать копирования контейнера, пока активны итераторы на этом контейнере. Для получения дополнительной информации ознакомьтесь со статьёй Проблема итераторов при неявном совместном использовании.
См. также QLinkedList::const_iterator и QMutableLinkedListIterator.
Документация по членам-функциям
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()
Создаёт неинициализированный итератор.
Функции, такие как operator*() и operator++(), не должны вызываться для неинициализированного итератора. Используйте operator=() для присвоения значения перед его использованием.
См. также QLinkedList::begin() и QLinkedList::end().
T &iterator::operator*() const
Возвращает изменяемую ссылку на текущий элемент.
Вы можете изменить значение элемента, используя operator*() слева от присваивания, например:
if (*it == "Hello")
*it = "Bonjour"; См. также operator->().
iterator iterator::operator+(int j) const
Возвращает итератор на элемент, находящийся в j позициях вперёд от текущего итератора. (Если j отрицательное, итератор идёт назад.)
Эта операция может быть медленной для больших значений j.
См. также operator-().
iterator &iterator::operator++()
Префиксный оператор ++ (++it) перемещает итератор к следующему элементу в списке и возвращает итератор на новый текущий элемент.
Вызов этой функции для QLinkedList::end() приводит к неопределённым результатам.
См. также operator--().
iterator iterator::operator++(int)
Это перегруженная функция.
Постфиксный оператор ++ (it++) перемещает итератор к следующему элементу в списке и возвращает итератор на предыдущий текущий элемент.
iterator &iterator::operator+=(int j)
Перемещает итератор на j элементов вперёд. (Если j отрицательное, итератор идёт назад.)
См. также operator-=() и operator+().
iterator iterator::operator-(int j) const
Возвращает итератор на элемент, расположенный в j позициях назад от текущего итератора. (Если j отрицательное, итератор идёт вперёд.)
Эта операция может быть медленной для больших значений j.
См. также operator+().
iterator &iterator::operator--()
Префиксный оператор -- (--it) делает предыдущий элемент текущим и возвращает итератор на новый текущий элемент.
Вызов этой функции для QLinkedList::begin() приводит к неопределённым результатам.
См. также operator++().
iterator iterator::operator--(int)
Это перегруженная функция.
Постфиксный оператор -- (it--) делает предыдущий элемент текущим и возвращает итератор на ранее текущий элемент.
iterator &iterator::operator-=(int j)
Перемещает итератор назад на j элементов. (Если j отрицательно, итератор перемещается вперёд.)
См. также operator+=() и operator-().
T *iterator::operator->() const
Возвращает указатель на текущий элемент.
См. также operator*().
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-6.1/qlinkedlist-iterator.html