QMutableListIterator 类
template <typename T> class QMutableListIteratorQMutableListIterator 类为 QList,QQueue 和 QStack 提供了一种类似 Java 风格的非常量迭代器。有关详细信息,请参阅 更多...
头文件 | #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> &container) |
详细说明
QList 同时具有 Java-style iterators 和 STL-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(); } }
该示例遍历列表,将负数替换为其绝对值,并删除零。
在任何给定时间内,只能有一个可变迭代器在列表上处于活动状态。此外,在迭代器处于活动状态(通过迭代器之外)时,不应直接对列表进行更改,因为这可能导致迭代器失效并导致未定义行为。
另请参阅QListIterator 和 QList::iterator。
成员函数文档
QMutableListIterator::QMutableListIterator(QList<T> &list)
生成用于遍历列表的迭代器。迭代器设置为在列表的前端(在第一个项目之前)。
另请参阅operator=。
QMutableListIterator<T> &QMutableListIterator::operator=(QList<T> &container)
使迭代器操作列表。迭代器设置为在列表的前端(在第一个项目之前)。
void QMutableListIterator::toFront()
将迭代器移动到容器的前端(在第一个项目之前)。
void QMutableListIterator::toBack()
将迭代器移动到容器的后端(在最后一个项目之后)。
bool QMutableListIterator::hasNext() const
如果迭代器之前至少有一个项目(即迭代器尚未到达容器的末尾),则返回 true;否则返回 false。
另请参阅hasPrevious() 和 next。
bool QMutableListIterator::hasPrevious() const
如果迭代器之后至少有一个项目(即迭代器尚未到达容器的开头),则返回 true;否则返回 false。
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。调用后,迭代器位于插入项之后。
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(); }
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 公司和/或其他国家的商标。所有其他商标均为其各自所有者的财产。