Spec-Zone.ru › Qt 5.13

Класс key_iterator

Класс key_iterator объявлен в классе QHash.

Класс QHash::key_iterator предоставляет итератор в стиле STL для ключей QHash и QMultiHash. Подробнее...

Этот класс был представлен в Qt 5.6.

  • Список всех членов, включая унаследованные

Открытые функции

const_iterator base() const
bool operator!=(key_iterator other) const
const Key & operator*() const
key_iterator & operator++()
key_iterator operator++(int)
key_iterator & operator--()
key_iterator operator--(int)
const Key * operator->() const
bool operator==(key_iterator other) const

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

QHash::key_iterator по сути такой же, как QHash::const_iterator, с той разницей, что operator*() и operator->() возвращают ключ вместо значения.

Для большинства случаев следует использовать QHash::iterator и QHash::const_iterator, так как вы можете легко получить доступ к ключу, вызвав QHash::iterator::key():

for (QHash<int, QString>::const_iterator it = hash.cbegin(), end = hash.cend(); it != end; ++it) {
    cout << "The key: " << it.key() << endl
    cout << "The value: " << it.value() << endl;
    cout << "Also the value: " << (*it) << endl;
}

Однако, для обеспечения совместимости между ключами QHash и алгоритмами в стиле STL нам нужен итератор, который обращается к ключу, а не к значению. С помощью QHash::key_iterator мы можем применить алгоритм к диапазону ключей без необходимости вызывать QHash::keys(), что неэффективно, так как это требует одной итерации QHash и выделения памяти для создания временного QList.

// Inefficient, keys() is expensive
QList<int> keys = hash.keys();
int numPrimes = std::count_if(keys.cbegin(), keys.cend(), isPrimeNumber);
qDeleteAll(hash2.keys());

// Efficient, no memory allocation needed
int numPrimes = std::count_if(hash.keyBegin(), hash.keyEnd(), isPrimeNumber);
qDeleteAll(hash2.keyBegin(), hash2.keyEnd());

QHash::key_iterator является константным, изменение ключа невозможно.

Конструктор QHash::key_iterator по умолчанию создает неинициализированный итератор. Необходимо инициализировать его с помощью функции QHash, например, QHash::keyBegin() или QHash::keyEnd().

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

См. также QHash::const_iterator и QHash::iterator.

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

const_iterator key_iterator::base() const

Возвращает базовый const_iterator, на котором основан данный key_iterator.

bool key_iterator::operator!=(key_iterator other) const

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

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

const Key &key_iterator::operator*() const

Возвращает ключ текущего элемента.

key_iterator &key_iterator::operator++()

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

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

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

key_iterator key_iterator::operator++(int)

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

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

key_iterator &key_iterator::operator--()

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

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

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

key_iterator key_iterator::operator--(int)

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

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

const Key *key_iterator::operator->() const

Возвращает указатель на ключ текущего элемента.

bool key_iterator::operator==(key_iterator other) const

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

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

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

Spec-Zone.ru

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