iterator 类

class QSet::iterator

QSet::iterator 类提供了一个 STL 风格的非 const 迭代器,用于 QSet。了解更多...

公共类型

公共函数

iterator()
iterator(const QSet<T>::iterator &other)
booloperator!=(const QSet<T>::iterator &other) const
booloperator!=(const QSet<T>::const_iterator &other) const
const T &operator*() const
QSet<T>::iterator &operator++()
QSet<T>::iteratoroperator++(int)
const T *operator->() const
QSet<T>::iterator &operator=(const QSet<T>::iterator &other)
booloperator==(const QSet<T>::iterator &other) const
booloperator==(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_iteratorQMutableSetIterator

成员类型文档

iterator::iterator_category

表示这些迭代器是双向迭代器的std::bidirectional_iterator_tag的同义词。

成员函数文档

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. 的商标。所有其他商标均为其各自所有者的财产。