迭代器类

QHash::iterator

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

公共函数

iterator()
const Key &key() const
T &value() const
booloperator!=(const QHash<Key, T>::iterator &other) const
booloperator!=(const QHash<Key, T>::const_iterator &other) const
T &operator*() const
QHash<Key, T>::iterator &operator++()
QHash<Key, T>::iteratoroperator++(int)
T *operator->() const
booloperator==(const QHash<Key, T>::iterator &other) const
booloperator==(const QHash<Key, T>::const_iterator &other) const

详细描述

QHash<Key, T>::iterator 允许您遍历 QHash 并修改与特定键关联的值(但不能修改键)。如果您想遍历常量 QHash,应使用 QHash::const_iterator。在非常量 QHash 上使用 QHash::const_iterator 也是一种良好的编程实践,除非您需要通过迭代器修改 QHash。常量迭代器稍微快一点,并且可以提高代码的可读性。

默认的 QHash::iterator 构造函数创建一个未初始化的迭代器。在您开始迭代之前,您必须使用如 QHash::begin()、QHash::end() 或 QHash::find() 这样的 QHash 函数对其进行初始化。以下是一个典型的循环,用于打印存储在哈希中的所有(键,值)对

QHash<QString, int> hash;
hash.insert("January", 1);
hash.insert("February", 2);
...
hash.insert("December", 12);

for (auto i = hash.cbegin(), end = hash.cend(); i != end; ++i)
    cout << qPrintable(key()) << ": " << i.value() << endl;

与按键排序其项目的 QMap 不同,QHash 按任意顺序存储其项目。

以下是一个示例,它将 QHash 中存储的所有值增加2

for (auto i = hash.begin(), end = hash.end(); i != end; ++i)
    i.value() += 2;

要从 QHash 中删除元素,可以使用 erase_if(QHash<Key, T> &map, Predicate pred)

erase_if(hash, [](const QHash<QString, int>::iterator it) { return it.value() > 10; });

可以在同一个哈希上使用多个迭代器。但是,请注意,直接对 QHash(插入和删除项目)进行的任何修改都可能导致迭代器无效。

向哈希中插入项目或调用类似 QHash::reserve() 或 QHash::squeeze() 的方法会使指向哈希的所有迭代器失效。只有当 QHash 不需要增长/缩小其内部哈希表时,迭代器才保证有效。使用重哈希操作后生成的任何迭代器都会导致未定义的行为。

如果您需要长时间保持迭代器,我们建议您使用 QMap 而不是 QHash

警告: 隐式共享容器上的迭代器并不完全像 STL-迭代器那样工作。当迭代器对其容器生效时,您应该避免复制容器。有关更多信息,请参阅 隐式共享迭代器问题

另请参阅 QHash::const_iteratorQHash::key_iteratorQHash::key_value_iterator

成员函数文档

[noexcept] bool iterator::operator==(const QHash<Key, T>::const_iterator &other) const

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

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

另请参阅 operator!=().

[noexcept] bool iterator::operator!=(const QHash<Key, T>::const_iterator &other) const

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

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

另请参阅 operator==().

[constexpr noexcept] iterator::iterator()

构造一个未初始化的迭代器。

在初始化迭代器之前,不要在未初始化的迭代器上调用 key(),value() 和 operator++() 等功能。使用 operator=() 将值赋给它在使用之前。

另请参阅 QHash::begin() 和 QHash::end()。

[noexcept] const Key &iterator::key() const

以 const 引用返回当前项的键。

通过迭代器直接更改项的键没有直接方式,尽管可以通过调用 QHash::erase() 然后调用 QHash::insert() 来实现。

另请参阅 value()。

[noexcept] T &iterator::value() const

返回当前项值的可修改引用。

您可以通过在赋值表达式的左边使用value()来更改项的值,例如

if (i.key() == "Hello")
    i.value() = "Bonjour";

另请参阅 key() 和 operator*().

[noexcept] T &iterator::operator*() const

返回当前项值的可修改引用。

value()相同。

另请参阅 key().

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

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

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

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

这是一个重载函数。

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

[noexcept] T *iterator::operator->() const

返回当前项值的指针。

另请参阅 value()。

© 2024 The Qt Company Ltd. 本文档的贡献专属于各自的所有者。本文档是根据自由软件基金会发布的GNU自由文档许可版1.3许可的。Qt及其相关标志是芬兰和其他国家/地区的The Qt Company Ltd.的商标。所有其他商标均为各自所有者的财产。