iterator 类
class QSet::iteratorQSet::iterator 类提供了一个 STL 风格的非 const 迭代器,用于 QSet。了解更多...
公共类型
公共函数
iterator() | |
iterator(const QSet<T>::iterator &other) | |
bool | operator!=(const QSet<T>::iterator &other) const |
bool | operator!=(const QSet<T>::const_iterator &other) const |
const T & | operator*() const |
QSet<T>::iterator & | operator++() |
QSet<T>::iterator | operator++(int) |
const T * | operator->() const |
QSet<T>::iterator & | operator=(const QSet<T>::iterator &other) |
bool | operator==(const QSet<T>::iterator &other) const |
bool | operator==(const QSet<T>::const_iterator &other) const |
详细描述
QSet 既有 STL 风格迭代器,也有 Java 风格迭代器。STL 风格的迭代器比较底层,使用起来比较麻烦;但是它们稍微快一点,对于已经熟悉 STL 的开发者来说,有其熟悉度的优势。
QSet<T>::iterator 允许你在迭代的同时遍历 QSet 并删除项目(使用 QSet::erase ())。(QSet 不允许通过迭代器修改值,因为这可能会要求移动 QSet 使用的内部哈希表中的值。)如果你想迭代一个 const 的 QSet,你应该使用 QSet::const_iterator。通常,即使在非 const 的 QSet 上,也建议使用 QSet::const_iterator,除非你需要通过迭代器更改 QSet。Const 迭代器稍微快一点,可以提高代码的可读性。
默认的 QSet::iterator 构造函数创建了一个未初始化的迭代器。在使用遍历之前,你必须使用像 QSet::begin (),QSet::end () 或 QSet::insert () 这样的函数进行初始化。下面是一个典型的循环,该循环打印存储在集合中的所有项目:
QSet<QString> set = {"January", "February", ... "December"} // i is a QSet<QString>::iterator for (auto i = set.begin(), end = set.end(); i != end; ++i) qDebug() << *i;
下面是一个循环,当迭代时,从集合中移除某些项目(所有以 'J' 开头的项目):
QSet<QString> set = {"January", "February", ... "December"}; auto i = set.begin(); while (i != set.end()) { if ((*i).startsWith('J')) { i = set.erase(i); } else { ++i; } }
STL风格的迭代器可以用作泛型算法的参数。例如,以下是如何使用qFind()算法在集中查找一个项的方法。
QSet<QString> set; ... const auto predicate = [](const QString &s) { return s.compare("Jeanette", Qt::CaseInsensitive) == 0; }; QSet<QString>::iterator it = std::find_if(set.begin(), set.end(), predicate); if (it != set.end()) cout << "Found Jeanette" << endl;
可以将多个迭代器用于同一个集。
警告:隐式共享容器上的迭代器的工作方式并不完全像STL迭代器。您应该避免在迭代器活动期间复制容器。更多信息,请参阅隐式共享迭代器问题。
另请参阅:QSet::const_iterator 和 QMutableSetIterator。
成员函数文档
iterator::iterator()
构造一个未初始化的迭代器。
在未初始化的迭代器上不应调用像operator*()和operator++()这样的函数。在使用它之前,使用operator=()将其分配一个值。
另请参阅:QSet::begin() 和 QSet::end。
iterator::iterator(const QSet<T>::iterator &other)
构造other的副本。
QSet<T>::iterator &iterator::operator=(const QSet<T>::iterator &other)
将other分配给此迭代器。
const T &iterator::operator*() const
返回对当前项的引用。
另请参阅:operator->。
const T *iterator::operator->() const
返回对当前项的指针。
另请参阅:operator*。
bool iterator::operator==(const QSet<T>::iterator &other) const
如果other指向此迭代器指向的同一项,则返回true
;否则返回false
。
另请参阅:operator!=。
bool iterator::operator!=(const QSet<T>::const_iterator &other) const
bool iterator::operator==(const QSet<T>::const_iterator &other) const
这是一个重载的函数。
bool iterator::operator!=(const QSet<T>::iterator &other) const
如果other指向与此迭代器不同的项,则返回true
;否则返回false
。
另请参阅:operator==。
QSet<T>::iterator &iterator::operator++()
前缀++运算符(《code translate="no">++it
在 QSet<T>::constEnd() 上调用此函数会导致未定义的结果。
QSet<T>::iterator iterator::operator++(int)
这是一个重载的函数。
后缀 ++ 运算符 (it++
) 将迭代器推进集合中的下一个项目,并返回之前当前项的迭代器。
© 2024 The Qt Company Ltd. 其中包含的文档贡献的版权属于各自的拥有者。本提供的文档是根据自由软件基金会的助学计划以 GNU自由文档许可证版本1.3 的条款授权的。Qt及其相关商标是芬兰及全球其他国家的 The Qt Company Ltd. 的商标。所有其他商标均为其各自所有者的财产。