迭代器类
类 QHash::iteratorQHash::iterator 类提供了一个 STL 样式的非常量迭代器,用于 QHash。更多信息...
公共函数
iterator() | |
const Key & | key() const |
T & | value() const |
bool | operator!=(const QHash<Key, T>::iterator &other) const |
bool | operator!=(const QHash<Key, T>::const_iterator &other) const |
T & | operator*() const |
QHash<Key, T>::iterator & | operator++() |
QHash<Key, T>::iterator | operator++(int) |
T * | operator->() const |
bool | operator==(const QHash<Key, T>::iterator &other) const |
bool | operator==(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)
可以在同一个哈希上使用多个迭代器。但是,请注意,直接对 QHash(插入和删除项目)进行的任何修改都可能导致迭代器无效。
向哈希中插入项目或调用类似 QHash::reserve() 或 QHash::squeeze() 的方法会使指向哈希的所有迭代器失效。只有当 QHash 不需要增长/缩小其内部哈希表时,迭代器才保证有效。使用重哈希操作后生成的任何迭代器都会导致未定义的行为。
如果您需要长时间保持迭代器,我们建议您使用 QMap 而不是 QHash。
警告: 隐式共享容器上的迭代器并不完全像 STL-迭代器那样工作。当迭代器对其容器生效时,您应该避免复制容器。有关更多信息,请参阅 隐式共享迭代器问题。
另请参阅 QHash::const_iterator,QHash::key_iterator 和 QHash::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";
[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.的商标。所有其他商标均为各自所有者的财产。