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