QMutableLinkedListIterator 类

template <typename T> class QMutableLinkedListIterator

QMutableLinkedListIterator 类提供了一个 Java 样式的非常量迭代器,用于 QLinkedList。有关更多信息,请参阅详情

头文件 #include <QMutableLinkedListIterator>
CMakefind_package(Qt6 REQUIRED COMPONENTS Core5Compat)
target_link_libraries(mytarget PRIVATE Qt6::Core5Compat)
qmakeQT += core5compat

公共函数

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

详细描述

QLinkedList 具有类似Java 风格迭代器和类似STL 风格迭代器的迭代器。Java 风格迭代器更高级,也更容易使用,但效率略低。

QMutableLinkedListIterator<T> 允许您迭代QLinkedList<T>,并修改该列表。如果您不想修改列表(或有一个 const QLinkedList),则可以使用稍微快一点的 QLinkedListIterator<T>。

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

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

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

以下是如何以倒序遍历元素的方法

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

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

在任何给定时间,一个可变迭代器只能对一个列表进行操作。此外,在迭代器活动时(与通过迭代器相反),不应直接对列表进行更改,因为这可能会导致迭代器无效并导致未定义行为。

另请参阅QLinkedListIteratorQLinkedList::iterator

成员函数文档

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

构造一个遍历 list 的迭代器。迭代器会被设置为在列表的前面(在第一项之前)。

另请参阅operator=()。

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

使迭代器操作 list。迭代器会被设置为在列表的前面(在第一项之前)。

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

void QMutableLinkedListIterator::toFront()

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

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

void QMutableLinkedListIterator::toBack()

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

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

bool QMutableLinkedListIterator::hasNext() const

如果迭代器前面至少有一个项,即迭代器不在容器的后面,返回 true;否则返回 false

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

bool QMutableLinkedListIterator::hasPrevious() const

如果迭代器后面至少有一个项目,则返回 true,即迭代器不在容器的开头;否则返回 false

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

bool QMutableLinkedListIterator::findNext(const T &value)

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

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

另请参阅findPrevious()。

bool QMutableLinkedListIterator::findPrevious(const T &value)

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

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

另请参阅findNext()。

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()、peekPrevious() 和 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 &) const

使用遍历函数(next()、previous()、findNext()、findPrevious())跳过的最后一个条目的值被替换为

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

示例

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

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

const T &QMutableLinkedListIterator::value() const

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

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

另请参阅 setValue()。

T &QMutableLinkedListIterator::value()

这是一个重载函数。

返回使用遍历函数跳过的最后一个条目的非const引用的值。

© 2024 Qt公司版权所有。此处包含的文档贡献是各自所有者的版权。提供的文档是根据自由软件基金会的发布,许可在GNU自由文档许可版本1.3下使用的。Qt及其相应标志是芬兰及其它国家/地区的Qt公司的商标。所有其他商标属于其各自所有者。