QMutableListIterator 类

template <typename T> class QMutableListIterator

QMutableListIterator 类为 QListQQueueQStack 提供了一种类似 Java 风格的非常量迭代器。有关详细信息,请参阅 更多...

头文件 #include <QMutableListIterator>
CMakefind_package(Qt6 REQUIRED COMPONENTS Core)
target_link_libraries(mytarget PRIVATE Qt6::Core)
qmakeQT += core

公共函数

QMutableListIterator(QList<T> &list)
boolfindNext(const T &value)
boolfindPrevious(const T &value)
boolhasNext() const
boolhasPrevious() const
voidinsert(const T &value)
T &next()
T &peekNext() const
T &peekPrevious() const
T &previous()
voidremove()
voidsetValue(const T &value) const
voidtoBack()
voidtoFront()
const T &value() const
T &value()
QMutableListIterator<T> &operator=(QList<T> &container)

详细说明

QList 同时具有 Java-style iteratorsSTL-style iterators。STL-style iterators 更高效,应优先使用。

使用迭代器的一种替代方法是使用索引位置。大多数 QList 成员函数都将索引作为第一个参数,这使得可以在不使用迭代器的情况下访问、插入和删除项。

QMutableListIterator<T> 允许您遍历 QList<T>(或 QQueue<T>)并修改列表。如果您不希望修改列表(或有一个 const QList),则可使用略快一些的 QListIterator<T>。

QMutableListIterator 构造函数接受一个 QList 作为参数。构造完成后,迭代器位于列表的开头(在第一个项之前)。以下是按顺序遍历所有元素的示例:

QList<float> list;
...
QMutableListIterator<float> i(list);
while (i.hasNext())
    float f = i.next();

next() 函数返回列表中的下一个项目并推进迭代器。与 STL 样式迭代器不同,Java 样式迭代器是指向项目之间的对象,而不是指向项目的直接目标。第一次调用 next() 会将迭代器推进到第一个和第二个项目之间,并返回第一个项目;第二次调用 next() 会将迭代器推进到第二个和第三个项目之间,返回第二个项目;依此类推。

下面是如何以相反的顺序遍历元素的示例

QMutableListIterator<float> i(list);
i.toBack();
while (i.hasPrevious())
    float f = i.previous();

如果您想找到特定值的所有出现,请在循环中使用 findNext() 或 findPrevious()。

如果您想在遍历列表时删除项目,请使用 remove()。如果您想修改项目值,请使用 setValue()。如果您想在新列表中插入新项目,请使用 insert()。

示例

QMutableListIterator<int> i(list);
while (i.hasNext()) {
    int val = i.next();
    if (val < 0) {
        i.setValue(-val);
    } else if (val == 0) {
        i.remove();
    }
}

该示例遍历列表,将负数替换为其绝对值,并删除零。

在任何给定时间内,只能有一个可变迭代器在列表上处于活动状态。此外,在迭代器处于活动状态(通过迭代器之外)时,不应直接对列表进行更改,因为这可能导致迭代器失效并导致未定义行为。

另请参阅QListIteratorQList::iterator

成员函数文档

QMutableListIterator::QMutableListIterator(QList<T> &list)

生成用于遍历列表的迭代器。迭代器设置为在列表的前端(在第一个项目之前)。

另请参阅operator=

QMutableListIterator<T> &QMutableListIterator::operator=(QList<T> &container)

使迭代器操作列表。迭代器设置为在列表的前端(在第一个项目之前)。

另请参阅toFront() 和 toBack

void QMutableListIterator::toFront()

将迭代器移动到容器的前端(在第一个项目之前)。

另请参阅toBack() 和 next

void QMutableListIterator::toBack()

将迭代器移动到容器的后端(在最后一个项目之后)。

另请参阅toFront() 和 previous

bool QMutableListIterator::hasNext() const

如果迭代器之前至少有一个项目(即迭代器尚未到达容器的末尾),则返回 true;否则返回 false。

另请参阅hasPrevious() 和 next

bool QMutableListIterator::hasPrevious() const

如果迭代器之后至少有一个项目(即迭代器尚未到达容器的开头),则返回 true;否则返回 false。

另请参阅hasNext() 和 previous

bool QMutableListIterator::findNext(const T &value)

从当前位置开始向前搜索 value。如果找到 value,则返回 true;否则返回 false

调用后,如果找到了 value,迭代器将被定位到匹配项之后;否则,迭代器定位到容器的末尾。

另请参阅 findPrevious().

bool QMutableListIterator::findPrevious(const T &value)

从当前位置开始向后搜索 value。如果找到 value,则返回 true;否则返回 false

调用后,如果找到了 value,迭代器将被定位到匹配项之前;否则,迭代器定位到容器的开头。

另请参阅 findNext().

void QMutableListIterator::insert(const T &value)

在当前位置插入 value。调用后,迭代器位于插入项之后。

另请参阅 remove() 和 setValue().

T &QMutableListIterator::next()

返回对下一项的引用,并将迭代器前移一个位置。

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

另请参阅 hasNext(),peekNext() 和 previous().

T &QMutableListIterator::peekNext() const

返回对下一项的引用,而不移动迭代器。

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

另请参阅 hasNext(),next() 和 peekPrevious().

T &QMutableListIterator::peekPrevious() const

返回对上一项的引用,而不移动迭代器。

在位于容器开头的迭代器上调用此函数会导致结果未定义。

另请参阅 hasPrevious(),previous() 和 peekNext().

T &QMutableListIterator::previous()

返回对上一项的引用,并将迭代器后移一个位置。

在位于容器开头的迭代器上调用此函数会导致结果未定义。

另请参阅 hasPrevious(),peekPrevious() 和 next().

void QMutableListIterator::remove()

移除最后跳过的项(使用任一遍历函数之一)(nextpreviousfindNextfindPrevious)。

示例

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

另请参阅 insert() 和 setValue().

void QMutableListIterator::setValue(const T &value) const

使用 value 替换上一个通过遍历函数跳过的项目中的值。

遍历函数包括 next()、previous()、findNext() 和 findPrevious()。

示例

QMutableListIterator<double> i(list);
while (i.hasNext()) {
    double val = i.next();
    i.setValue(std::sqrt(val));
}

另请参阅 value()、remove() 和 insert().

const T &QMutableListIterator::value() const

返回上一个通过遍历函数(next()、previous()、findNext()、findPrevious)跳过的项目的值。

在调用 next() 或 findNext() 后,value() 等价于 peekPrevious()。在调用 previous() 或 findPrevious() 后,value() 等价于 peekNext()。

另请参阅 setValue().

T &QMutableListIterator::value()

这是一个重载函数。

返回上一个通过遍历函数跳过的项目的非const引用的值。

© 2024 Qt 公司。包含在此处的文档贡献是相应所有者的版权。提供的文档受 GNU 自由文档许可证版本 1.3 的条款许可,由自由软件基金发布。Qt 及相关标志是芬兰的 Qt 公司和/或其他国家的商标。所有其他商标均为其各自所有者的财产。