迭代器类
class QMap::iteratorQMap::iterator 类提供了用于 QMap 的 STL 样式的非 const 迭代器。更多...
公共类型
公共函数
iterator() | |
const Key & | key() const |
T & | value() const |
T & | operator*() const |
QMap<Key, T>::iterator & | operator++() |
QMap<Key, T>::iterator | operator++(int) |
QMap<Key, T>::iterator & | operator--() |
QMap<Key, T>::iterator | operator--(int) |
T * | operator->() const |
相关非成员
bool | operator!=(const QMap<Key, T>::iterator &lhs, const QMap<Key, T>::iterator &rhs) |
bool | operator==(const QMap<Key, T>::iterator &lhs, const QMap<Key, T>::iterator &rhs) |
详细说明
QMap<Key, T>::iterator 允许您迭代一个 QMap,可以修改存储在特定键下的值(但不修改键)。如果需要迭代一个 const QMap,应使用 QMap::const_iterator。在非 const QMap 上一般也推荐使用 QMap::const_iterator,除非您需要通过迭代器修改 QMap。常量迭代器略显更快,并且可以提高代码的可读性。
默认的 QMap::iterator 构造函数创建一个未初始化的迭代器。在迭代之前,必须使用类似 QMap::begin()、QMap::end() 或 QMap::find() 的功能进行初始化。下面是一个典型循环的示例,该循环打印存储在映射中的所有(键,值)对。
QMap<QString, int> map; map.insert("January", 1); map.insert("February", 2); ... map.insert("December", 12); for (auto i = map.cbegin(), end = map.cend(); i != end; ++i) cout << qPrintable(i.key()) << ": " << i.value() << endl;
与按任意顺序存储项的 QHash 不同,QMap 按键的顺序存储项。
下面是一个示例,示例中将 QMap 中存储的每个值增加 2。
for (auto i = map.begin(), end = map.end(); i != end; ++i) i.value() += 2;
要从 QMap 中删除元素,可以使用 erase_if(QMap
多迭代器可以在同一个映射中使用。如果您向映射中添加项目,现有迭代器将保持有效。如果您从映射中删除项目,则指向已删除项目的迭代器将成为悬挂迭代器。
警告:隐式共享容器上的迭代器与STL-迭代器不完全一样。您应在容器上的迭代器处于活动状态时避免复制容器。有关更多信息,请参阅隐式共享迭代器问题。
另请参阅:QMap::const_iterator,QMap::key_iterator,以及QMap::key_value_iterator。
成员函数文档
iterator::iterator()
构造一个未初始化的迭代器。
在未初始化的迭代器上不应调用key(),value和operator++()之类的函数。在开始使用之前,请使用operator=()为其分配值。
另请参阅:QMap::begin()和QMap::end().
const Key &iterator::key() const
返回当前项的密钥作为常量引用。
没有直接通过迭代器更改项的密钥的方法,尽管可以通过先调用QMap::erase()然后调用QMap::insert()来实现。
另请参阅:value。
T &iterator::value() const
返回当前项的可修改引用。
您可以通过在赋值表达式的左侧使用value()来更改项的值,例如
if (i.key() == "Hello") i.value() = "Bonjour";
T &iterator::operator*() const
返回当前项的可修改引用。
与value相同。
另请参阅:key。
QMap<Key, T>::iterator &iterator::operator++()
前缀++
运算符(++i
)将迭代器前进到映射中的下一个项目,并返回指向新当前项的迭代器。
在QMap::end()上调用此函数会导致未知结果。
另请参阅:operator--。
QMap<Key, T>::iterator iterator::operator++(int)
这是一个重载的函数。
后缀++
运算符(i++
)将迭代器前进到映射中的下一个项目,并返回指向先前当前项的迭代器。
QMap<Key, T>::iterator &iterator::operator--()
前缀--
运算符(--i
)使前面的项成为当前项,并返回指向新当前项的迭代器。
在QMap::begin()上调用此函数会导致未定义的结果。
另请参阅 operator++.
QMap<Key, T>::iterator iterator::operator--(int)
这是一个重载的函数。
后缀--
运算符(i--
)将前一个项目变为当前项,并返回一个指向先前当前项的迭代器。
T *iterator::operator->() const
返回当前项值的一个指针。
另请参阅:value。
相关非成员
bool operator==(const QMap<Key, T>::iterator &lhs, const QMap<Key, T>::iterator &rhs)
如果lhs迭代器指向与rhs迭代器相同的项,则返回true
;否则返回false
。
另请参阅 operator!=.
bool operator!=(const QMap<Key, T>::iterator &lhs, const QMap<Key, T>::iterator &rhs)
如果lhs迭代器指向与rhs迭代器不同的项,则返回true
;否则返回false
。
另请参阅 operator==.
© 2024 The Qt Company Ltd。本文件中包含的文档贡献是各自所有者的版权。提供的文档受GNU自由文档许可证版本1.3的条例约束,该许可证由自由软件基金会发布。Qt及其各自的标志是The Qt Company Ltd在芬兰和其他国家/地区的商标。所有其他商标均为其各自所有者的财产。