QMutableListIterator Class

template <typename T> class QMutableListIterator

QMutableListIterator 类为QListQQueueQStack 提供了 Java 风格的非常数迭代器。更多

Header: #include <QMutableListIterator>
CMake: find_package(Qt6 REQUIRED COMPONENTS Core)
target_link_libraries(mytarget PRIVATE Qt6::Core)
qmake: QT += core

公共函数

QMutableListIterator(QList<T> &list)
bool findNext(const T &value)
bool findPrevious(const T &value)
bool hasNext() const
bool hasPrevious() const
void insert(const T &value)
T &next()
T &peekNext() const
T &peekPrevious() const
T &previous()
void remove()
void setValue(const T &value) const
void toBack()
void toFront()
const T &value() const
T &value()
QMutableListIterator<T> &operator=(QList<T> &list)

详细说明

QList 既有Java 风格的迭代器,也有STL 风格的迭代器。STL 风格的迭代器效率更高,应优先使用。

使用迭代器的另一种方法是使用索引位置。大多数QList 成员函数都将索引作为其第一个参数,因此无需使用迭代器就能访问、插入和移除项目。

QMutableListIterator<T> 允许您遍历QList<T>(或QQueue<T>)并修改列表。如果不想修改列表(或有一个常量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)

构造一个遍历list 的迭代器。迭代器被设置为位于列表的前端(第一个项目之前)。

另请参阅 operator=() 。

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

使迭代器在list 上运行。迭代器被设置在列表的前端(第一个项目之前)。

另请参阅 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()

删除使用某个遍历函数(next(),previous(),findNext(),findPrevious() )跳转的最后一个项目。

示例:

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()

这是一个重载函数。

返回使用其中一个遍历函数跳转的最后一个项目的值,该值是一个非连续引用。

© 2025 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.