Класс iterator
(QSet::iterator)Класс QSet::iterator предоставляет итератор в стиле STL для QSet. Подробнее...
| Заголовок: | #include <iterator> |
| qmake: | QT += core |
| С момента: | Qt 4.2 |
Типы public
| typedef | difference_type |
| typedef | iterator_category |
| typedef | pointer |
| typedef | reference |
| typedef | value_type |
Функции public
| iterator() | |
| iterator(typename Hash::iterator i) | |
| 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.
Документация по функциям-членам
iterator &iterator::operator-=(int j)
Перемещает итератор назад на j элементов. (Если j отрицательное, итератор перемещается вперёд.)
Эта операция может быть медленной для больших значений j.
См. также operator+=() и operator-().
iterator &iterator::operator+=(int j)
Перемещает итератор вперёд на j элементов. (Если j отрицательное, итератор перемещается назад.)
Эта операция может быть медленной для больших значений j.
См. также operator-=() и operator+().
iterator iterator::operator-(int j) const
Возвращает итератор к элементу, расположенному на j позиций назад от текущего итератора. (Если j отрицательное, итератор перемещается вперёд.)
Эта операция может быть медленной для больших значений j.
См. также operator+().
iterator iterator::operator+(int j) const
Возвращает итератор к элементу, расположенному на j позиций вперёд от текущего итератора. (Если j отрицательное, итератор перемещается назад.)
Эта операция может быть медленной для больших значений j.
См. также operator-().
iterator iterator::operator--(int)
Это перегруженная функция.
Постфиксный оператор -- (it--) делает предыдущий элемент текущим и возвращает итератор к предыдущему текущему элементу.
iterator &iterator::operator--()
Префиксный оператор -- (--it) делает предыдущий элемент текущим и возвращает итератор к новому текущему элементу.
Вызов этой функции для QSet::begin() приводит к неопределенным результатам.
См. также operator++().
iterator iterator::operator++(int)
Это перегруженная функция.
Постфиксный оператор ++ (it++) перемещает итератор к следующему элементу в множестве и возвращает итератор к предыдущему текущему элементу.
iterator &iterator::operator++()
Префиксный оператор ++ (++it) перемещает итератор к следующему элементу в множестве и возвращает итератор к новому текущему элементу.
Вызов этой функции для QSet<T>::constEnd() приводит к неопределенным результатам.
См. также operator--().
bool iterator::operator!=(const iterator &other) const
Возвращает true если other указывает на другой элемент, чем этот итератор; в противном случае возвращает false.
См. также operator==().
bool iterator::operator==(const const_iterator &other) const
bool iterator::operator!=(const const_iterator &other) const
Это перегруженная функция.
bool iterator::operator==(const iterator &other) const
Возвращает true если other указывает на тот же элемент, что и этот итератор; в противном случае возвращает false.
См. также operator!=().
const T *iterator::operator->() const
Возвращает указатель на текущий элемент.
См. также operator*().
const T &iterator::operator*() const
Возвращает ссылку на текущий элемент.
См. также operator->().
iterator &iterator::operator=(const iterator &other)
Присваивает other этому итератору.
iterator::iterator(const iterator &other)
Создаёт копию other.
Синонимы для std::bidirectional_iterator_tag, указывающие, что эти итераторы являются двунаправленными итераторами.
iterator::iterator()
Создаёт неинициализированный итератор.
Функции, такие как operator*() и operator++(), не должны вызываться для неинициализированного итератора. Используйте operator=() для присвоения значения перед его использованием.
См. также QSet::begin() и QSet::end().
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-5.12/qset-iterator.html