Spec-Zone.ru › Qt 5.12

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

Spec-Zone.ru

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