本页内容

QMutableLinkedListIterator Class

template <typename T> class QMutableLinkedListIterator

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

头文件: #include <QMutableLinkedListIterator>
CMake: find_package(Qt6 REQUIRED COMPONENTS Core5Compat)
target_link_libraries(mytarget PRIVATE Qt6::Core5Compat)
qmake: QT += core5compat

公共函数

QMutableLinkedListIterator(QLinkedList<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()
QMutableLinkedListIterator<T> &operator=(QLinkedList<T> &list)

详细说明

QLinkedList 同时提供了Java 风格的迭代器和 STL 风格的迭代器。Java 风格的迭代器比 STL 风格的迭代器更高级、更易于使用;但另一方面,其效率略低。

QMutableLinkedListIterator<T> 允许您遍历QLinkedList<T> 并修改该列表,其中T 是元素类型。如果您不想修改列表(或拥有一个 constQLinkedList ),请改用效率稍高的QLinkedListIterator<T>。

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

QLinkedList<float>list;
...
QMutableLinkedListIterator<float>i(list);
while(i.hasNext())
    qDebug() << i.next();

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

Qt 中 Java 风格迭代器的使用示例

以下是如何按反向顺序遍历元素的方法:

QMutableLinkedListIterator<float>i(list);
i.toBack();
while(i.hasPrevious())
    qDebug() << i.previous();

若要查找某个特定值的所有出现位置,请在循环中使用findNext()或findPrevious()。

若要在遍历列表时移除项目,请使用remove()。若要修改项目的值,请使用setValue()。若要在列表中插入新项目,请使用insert()。

示例:

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

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

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

另请参阅 QLinkedListIterator 和QLinkedList::iterator 。

成员函数文档

QMutableLinkedListIterator::QMutableLinkedListIterator(QLinkedList<T> &list)

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

另请参阅 operator=()。

bool QMutableLinkedListIterator::findNext(const T &value)

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

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

另请参阅 findPrevious()。

bool QMutableLinkedListIterator::findPrevious(const T &value)

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

调用完成后,若找到了 `value `,迭代器将定位在匹配项的正前方;否则,迭代器将定位在容器的开头。

另请参阅 findNext()。

bool QMutableLinkedListIterator::hasNext() const

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

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

bool QMutableLinkedListIterator::hasPrevious() const

如果迭代器后方至少有一个元素(即迭代器未位于容器开头),则返回true ;否则返回false 。

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

void QMutableLinkedListIterator::insert(const T &value)

在当前迭代器位置插入value 。调用完成后,迭代器将位于被插入项的正后方。

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

T &QMutableLinkedListIterator::next()

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

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

另请参见 hasNext()、peekNext() 和previous()。

T &QMutableLinkedListIterator::peekNext() const

返回对下一个元素的引用,且不移动迭代器。

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

另请参阅 hasNext()、next(),以及peekPrevious()。

T &QMutableLinkedListIterator::peekPrevious() const

返回对前一个元素的引用,且不移动迭代器。

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

另请参阅 hasPrevious()、previous() 和peekNext()。

T &QMutableLinkedListIterator::previous()

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

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

另请参阅 hasPrevious()、peekPrevious() 和next()。

void QMutableLinkedListIterator::remove()

删除使用以下遍历函数之一(next()、previous()、findNext()、findPrevious())跳过的最后一个元素。

示例:

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

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

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

使用value 将通过某种遍历函数跳过的最后一个项的值替换为该值。

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

示例:

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

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

void QMutableLinkedListIterator::toBack()

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

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

void QMutableLinkedListIterator::toFront()

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

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

const T &QMutableLinkedListIterator::value() const

返回使用以下遍历函数之一(next()、previous()、findNext()、findPrevious())跳过的最后一个项的值。

在调用next() 或findNext() 之后,value() 与peekPrevious() 效果相同。在调用previous() 或findPrevious() 之后,value() 与peekNext() 效果相同。

另请参阅 setValue()。

T &QMutableLinkedListIterator::value()

返回对使用某个遍历函数跳过后的最后一个项的值的非常量引用。

这是一个重载函数。

QMutableLinkedListIterator<T> &QMutableLinkedListIterator::operator=(QLinkedList<T> &list)

使迭代器在list 上运行。迭代器被设置为位于列表最前端(第一个元素之前)。

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