Spec-Zone.ru › Qt 5.6

Класс iterator

(QSet::iterator)

Класс QSet::iterator предоставляет итератор в стиле STL для QSet. Подробнее...

Заголовок: #include <QSet>
qmake: QT += core
С тех пор: Qt 4.2
  • Список всех членов, включая наследуемые

Типы публичного доступа

typedef iterator_category

Функции публичного доступа

iterator()
iterator(const iterator &other)
bool operator!=(const iterator &other) const
bool operator!=(const const_iterator &other) const
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)
const T * operator->() const
iterator & operator=(const iterator &other)
bool operator==(const iterator &other) const
bool operator==(const const_iterator &other) const

Подробное описание

Класс QSet::iterator предоставляет итератор в стиле STL для QSet.

QSet поддерживает как итераторы в стиле STL, так и итераторы в стиле Java. Итераторы в стиле STL более низкого уровня и сложнее в использовании, но при этом немного быстрее; для разработчиков, знакомых со STL, они обладают преимуществом понятности.

QSet<T>::iterator позволяет итерироваться по QSet и удалять элементы (используя QSet::erase()) во время итерации. (QSet не позволяет изменять значение через итератор, так как это потенциально может потребовать перемещения значения во внутренней хеш-таблице, используемой QSet.) Если вы хотите итерироваться по константному QSet, используйте QSet::const_iterator. В целом рекомендуется использовать QSet::const_iterator и для неконстантных QSet, если вам не нужно изменять QSet через итератор. Константые итераторы немного быстрее и повышают читаемость кода.

Конструктор QSet::iterator по умолчанию создаёт неинициализированный итератор. Его необходимо инициализировать, используя функцию, такую как QSet::begin(), QSet::end() или QSet::insert(), прежде чем начать итерацию. Вот типичный цикл, который выводит все элементы, хранящиеся в множестве:

QSet<QString> set;
set << "January" << "February" << ... << "December";

QSet<QString>::iterator i;
for (i = set.begin(); i != set.end(); ++i)
    qDebug() << *i;

Вот цикл, который удаляет определённые элементы (все, начинающиеся с 'J') из множества во время итерации:

QSet<QString> set;
set << "January" << "February" << ... << "December";

QSet<QString>::iterator i = set.begin();
while (i != set.end()) {
    if ((*i).startsWith('J')) {
        i = set.erase(i);
    } else {
        ++i;
    }
}

Итераторы в стиле STL могут использоваться как аргументы для обобщённых алгоритмов. Например, вот как найти элемент в множестве с помощью алгоритма qFind():

QSet<QString> set;
...
QSet<QString>::iterator it = qFind(set.begin(), set.end(), "Jeanette");
if (it != set.end())
    cout << "Found Jeanette" << endl;

На одном множестве можно использовать несколько итераторов.

Предупреждение: Итераторы неявно разделяемых контейнеров не работают точно так же, как итераторы STL. Следует избегать копирования контейнера, пока итераторы активны для этого контейнера. Подробнее см. Проблема итераторов неявно разделяемых контейнеров.

См. также QSet::const_iterator и QMutableSetIterator.

Документация по типам членов

typedef iterator::iterator_category

Синонимы для std::bidirectional_iterator_tag, указывающие, что эти итераторы являются двунаправленными.

Документация по функциям членов

iterator::iterator()

Создаёт неинициализированный итератор.

Функции, такие как operator*() и operator++(), не должны вызываться для неинициализированного итератора. Используйте operator=() для присвоения значения перед использованием.

См. также QSet::begin() и QSet::end().

iterator::iterator(const iterator &other)

Создаёт копию other.

bool iterator::operator!=(const iterator &other) const

Возвращает true если other указывает на другой элемент, чем этот итератор; в противном случае возвращает false.

См. также operator==().

bool iterator::operator!=(const const_iterator &other) const

Это перегруженная функция.

const T &iterator::operator*() const

Возвращает ссылку на текущий элемент.

См. также operator->().

iterator iterator::operator+(int j) const

Возвращает итератор на элемент, находящийся на j позиций вперёд от текущего итератора. (Если j отрицательно, итератор идёт назад.)

Эта операция может быть медленной для больших значений j.

См. также operator-().

iterator &iterator::operator++()

Префиксный оператор ++ (++it) перемещает итератор к следующему элементу в множестве и возвращает итератор на новый текущий элемент.

Вызов этой функции для QSet::constEnd() приводит к неопределённым результатам.

См. также operator--().

iterator iterator::operator++(int)

Это перегруженная функция.

Постфиксный оператор ++ (it++) перемещает итератор к следующему элементу в множестве и возвращает итератор на ранее текущий элемент.

iterator &iterator::operator+=(int j)

Перемещает итератор на j элементов вперёд. (Если j отрицательно, итератор идёт назад.)

Эта операция может быть медленной для больших значений j.

См. также operator-=() и operator+().

iterator iterator::operator-(int j) const

Возвращает итератор на элемент, находящийся на j позиций назад от текущего итератора. (Если j отрицательно, итератор идёт вперёд.)

Эта операция может быть медленной для больших значений j.

См. также operator+().

iterator &iterator::operator--()

Префиксный оператор -- (--it) делает предыдущий элемент текущим и возвращает итератор на новый текущий элемент.

Вызов этой функции для QSet::begin() приводит к неопределённым результатам.

См. также operator++().

iterator iterator::operator--(int)

Это перегруженный метод.

Постфиксный оператор -- (it--) делает предыдущий элемент текущим и возвращает итератор на ранее текущий элемент.

итератор &iterator::operator-=(int j)

Перемещает итератор назад на j элементов. (Если j отрицательное, итератор перемещается вперёд.)

Эта операция может быть медленной для больших значений j.

См. также operator+=() и operator-().

const T *iterator::operator->() const

Возвращает указатель на текущий элемент.

См. также operator*().

итератор &iterator::operator=(const итератор &other)

Присваивает other этому итератору.

bool iterator::operator==(const итератор &other) const

Возвращает true если other указывает на тот же элемент, что и этот итератор; в противном случае возвращает false.

См. также operator!=().

bool iterator::operator==(const const_итератор &other) const

Это перегруженный метод.

© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/archives/qt-5.6/qset-iterator.html

Spec-Zone.ru

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