本页内容

QMutableSetIterator Class

template <typename T> class QMutableSetIterator

QMutableSetIterator 类为QSet 提供了一个 Java 风格的非 const 迭代器。更多内容...

头文件: #include <QMutableSetIterator>
CMake: find_package(Qt6 REQUIRED COMPONENTS Core)
target_link_libraries(mytarget PRIVATE Qt6::Core)
qmake: QT += core

公共函数

QMutableSetIterator(QSet<T> &set)
bool findNext(const T &value)
bool hasNext() const
const T &next()
const T &peekNext() const
void remove()
void toBack()
void toFront()
const T &value() const
QMutableSetIterator<T> &operator=(QSet<T> &set)

详细说明

QSet 同时支持Java 风格迭代器和 STL 风格迭代器。STL 风格迭代器效率更高,建议优先使用。模板参数T 指定了集合中存储的项的类型。

QMutableSetIterator<T> 允许您遍历一个QSet<T>,并在遍历时从集合中移除项目。如果您不想修改集合(或者拥有一个 constQSet ),请改用速度稍快的QSetIterator<T>。

QMutableSetIterator 构造函数接受一个QSet 作为参数。构造完成后,迭代器位于集合的最前端(第一个元素之前)。以下是如何依次遍历所有元素的方法:

QSet<float> set;
//...
QMutableSetIterator<float> i(set);
while (i.hasNext())
    float f = i.next();

next() 函数返回集合中的下一个元素,并使迭代器向前移动。与 STL 风格的迭代器不同,Java 风格的迭代器指向元素之间,而非直接指向元素本身。 第一次调用 `next()` 会将迭代器移动到第一个和第二个元素之间的位置,并返回第一个元素;第二次调用 `next()` 会将迭代器移动到第二个和第三个元素之间的位置,并返回第二个元素;以此类推。

在元素 A、B、C、D 之间的迭代器位置

如果你希望在遍历集合的同时移除元素,请使用 `remove()`。

在给定的集合上,任何时候只能有一个可变迭代器处于活动状态。此外,在迭代器处于活动状态时(而非通过迭代器),不应直接对集合进行任何修改,因为这可能会使迭代器失效并导致未定义行为。

另请参阅 QSetIterator 和QSet::iterator 。

成员函数文档

QMutableSetIterator::QMutableSetIterator(QSet<T> &set)

构建一个用于遍历set 的迭代器。该迭代器被设置为位于集合的开头(第一个元素之前)。

另请参阅 operator=()。

bool QMutableSetIterator::findNext(const T &value)

从当前迭代器位置开始向前搜索value 。若找到value ,则返回true ;否则返回false 。

调用完成后,若找到了 `value `,则迭代器定位在匹配项的紧后方;否则,迭代器定位在容器的末尾。

bool QMutableSetIterator::hasNext() const

如果迭代器前方至少有一个元素(即迭代器不在容器的末尾),则返回true ;否则返回false 。

另请参阅 next()。

const T &QMutableSetIterator::next()

返回下一个元素,并将迭代器向前移动一个位置。

若在位于容器末尾的迭代器上调用此函数,将导致未定义的结果。

另请参阅 hasNext() 和peekNext()。

const T &QMutableSetIterator::peekNext() const

返回下一个元素,同时不移动迭代器。

若在位于容器末尾的迭代器上调用此函数,将导致结果未定义。

另请参阅 hasNext() 和next()。

void QMutableSetIterator::remove()

删除使用某一个遍历函数(next()、findNext())跳过的最后一个元素。

示例:

QMutableSetIterator<int> i(set);
while (i.hasNext()) {
    int val = i.next();
    if (val < -32768 || val > 32767)
        i.remove();
}

另请参阅 value()。

void QMutableSetIterator::toBack()

将迭代器移至容器末尾(位于最后一个元素之后)。

另请参阅 toFront()。

void QMutableSetIterator::toFront()

将迭代器移至容器开头(第一个元素之前)。

另请参阅 toBack() 和next()。

const T &QMutableSetIterator::value() const

返回使用next()或findNext()跳过的最后一个项的值。

QMutableSetIterator<T> &QMutableSetIterator::operator=(QSet<T> &set)

使迭代器在set 上运行。迭代器被设置为位于集合的开头(第一个元素之前)。

另请参阅 toFront() 和toBack()。

© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.