key_iterator 类

class QHash::key_iterator

QHash::key_iterator 类提供了一个 STL 样式的常量迭代器,用于 QHash 中的键。 更多信息...

公共函数

QHash::const_iteratorbase() const
booloperator!=(QHash::key_iterator other) const
const Key &operator*() const
QHash::key_iterator &operator++()
QHash::key_iteratoroperator++(int)
const Key *operator->() const
booloperator==(QHash::key_iterator other) const

详细描述

QHash::key_iterator 实质上与 QHash::const_iterator 类似,区别在于 operator*() 和 operator->() 返回的是键而不是值。

对于大多数用途,应使用 QHash::iterator 和 QHash::const_iterator,您可以通过调用 QHash::iterator::key() 容易地访问键。

for (auto it = hash.cbegin(), end = hash.cend(); it != end; ++it) {
    cout << "The key: " << it.key() << endl;
    cout << "The value: " << qPrintable(it.value()) << endl;
    cout << "Also the value: " << qPrintable(*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 是 const 的,无法修改键。

默认的 QHash::key_iterator 构造函数创建了一个未初始化的迭代器。您必须使用 QHash 函数(如 QHash::keyBegin() 或 QHash::keyEnd())来初始化它。

警告:隐式共享容器上的迭代器工作方式与 STL 迭代器不完全相同。您应该在活动的容器上避免复制容器。有关更多信息,请阅读 隐式共享迭代器问题

另请参阅:QHash::const_iterator 和 QHash::iterator。

成员函数文档

[noexcept] QHash<, T>::const_iterator key_iterator::base() const

返回此 const_iterator 所基于的底层 key_iterator

[noexcept] bool key_iterator::operator!=(QHash<, T>::key_iterator other) const

如果 other 指向与此迭代器不同的项,则返回 true;否则返回 false

也见 operator==

[noexcept] const &key_iterator::operator*() const

返回当前项的键。

[noexcept] QHash<, T>::key_iterator &key_iterator::operator++()

前缀 ++ 操作符 (++i) 将迭代器推进到哈希中的下一个项,并返回对新的当前项的迭代器。

QHash::keyEnd() 上调用此函数会导致未定义的结果。

[noexcept] QHash<, T>::key_iterator key_iterator::operator++(int)

这是一个重载函数。

后缀 ++ 操作符 (i++) 将迭代器推进到哈希中的下一个项,并返回对先前项的迭代器。

[noexcept] const *key_iterator::operator->() const

返回当前项键的指针。

[noexcept] bool key_iterator::operator==(QHash<, T>::key_iterator other) const

如果 other 指向与此迭代器相同的项,则返回 true;否则返回 false

也见 operator!=

© 2024 Qt 公司有限公司。此处包含的文档贡献归其各自的拥有者所有。此处提供的文档是根据自由软件基金会发布的 GNU自由文档许可证版本1.3 的条款许可的。Qt及其标志是芬兰的Qt公司及其在全世界其他国家的商标。所有其他商标均为其各自业主的财产。