Spec-Zone.ru › Qt 6.0

Класс iterator

класс QLinkedList::iterator

Класс QLinkedList::iterator предоставляет итератор в стиле STL (non-const) для 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.0/qlinkedlist-iterator.html

Spec-Zone.ru

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