Qt 迭代器
目录
(一) java风格迭代器
迭代点位于第一个列表项前面或者列表项的中间或者在最后一个的列表项的后面,不是直接指向某个列表项
| 容器类 | 只读迭代器类 | 读写迭代器类 |
|---|---|---|
| QList< T >,QQueue< T > | QListIterator< T > | QMutableListIterator< T > |
| QLinkList< T > | QLinkListIterator< T > | QMutableLinkListIterator< T > |
| QVetor< T >,QStack< T > | QVectorIterator< T > | QMutableVectorIterator< T> |
1. QListIterator类
1. 初始化
QList<int> list;
list<<1<<2<<3<<4<<5;
QListIterator<int> i(list);//指向列表第一项前面
while(i.hasNext())
qDebug()<<i.next();
2. findNext()
bool findNext(const T &value)
从前向后遍历,如果找到值,返回true;否则返回false。且找到后,迭代点是在该元素后面
3. findPrevious()
bool findPrevious(const T &value)
从后向前遍历,如果找到值,返回true;否则返回false,且找到后,迭代点是在该元素前面
4. hasNext()
bool hasNext() const
从前向后遍历,如果当前迭代点后面有元素,返回true,否则false
5. hasPrevious()
bool hasPrevious() const
从后向前遍历,如果当前迭代点后面有元素,返回true,否则false
6. next()
const T &next()
会跳过下一列表项(迭代点移动到该列表项之后),并返回他跳过列表项的内容
7.previous()
T &previous()
返回前一个列表项内容,迭代点移动到该列表项之前
8.toBack()
void toBack()
将迭代点移动到最后一个列表项之后
9.toFront()
void toFront()
将迭代点移动到第一个列表项之前
10.peekPrevious()/peekNext()
返回前(后)一个列表项,但不移动迭代点
其他只读类接口和上述相同
3.QMutableListIterator类
有上述接口
1.insert()
void insert(const T &value)
在当前迭代器位置插入值。在调用之后,迭代器就位于插入的项之后。
2.remove()
void remove()
删除使用遍历函数(next()、previous()、findNext()、findPrevious())跳过的项。
3.setValue()
void setValue(const T &value) const
修改使用遍历函数(next()、previous()、findNext()、findPrevious())跳过的项的值。
4.value()
const T &value() const
返回使用其中一个遍历函数(next()、previous()、findNext()、findPrevious())跳过的最后一项的值。在调用next()或findNext()之后,value()相当于peekPrevious()。在调用previous()或findPrevious()之后,value()相当于peekNext()。
5.value()重载
T &value()
这是一个重载函数。返回对使用一个遍历函数跳过的最后一个项的值的非常量引用。
其他读写类接口和上述相同
(二)STL风格迭代器
相当于指针,指向的是列表项(超前或者超尾)
| 容器类 | 只读迭代器类 | 读写迭代器类 |
|---|---|---|
| QList< T >,QQueue< T > | QListI< T >::const_iterator | QList< T >::iterator |
| QLinkList< T > | QLInkListI< T >::const_iterator | QLinkList< T >::iterator |
| QVetor< T >,QStack< T > | QVector< T >::const_iterator | QVector< T >::iterator |
例子:
#include <QCoreApplication>
#include <QDebug>
int main(int argc,char* argv[])
{
QCoreApplication a(argc,argv);
QList<int> list;
for(int i=0;i<10;i++)
{
list.insert(list.end(),i);
}
QList<int>::iterator i;
for(i=list.begin();i!=list.end();i++)
{
qDebug()<<(*i);
*i=(*i)*10;
}
qDebug()<<" ";
QList<int>::const_iterator ci;
for(ci=list.constBegin();ci!=list.constEnd();ci++)
{
qDebug()<<(*ci);
}
return a.exec();
}
Qt 迭代器的更多相关文章
- Qt迭代器(Java类型和STL类型)详解
迭代器为访问容器类里的数据项提供了统一的方法,Qt 有两种迭代器类:Java 类型的迭代器和 STL 类型的迭代器. 两者比较,Java 类型的迭代器更易于使用,且提供一些高级功能,而 STL 类型的 ...
- Qt中常用知识点
1:QRegExp 正则表达式 QRegExp regExp("[a-zA-Z][1-9][0-9]{0,2}"); xxx->setValidator(new QRegEx ...
- Qt容器类之二:迭代器
一.介绍 遍历一个容器可以使用迭代器(iterators)来完成,迭代器提供了一个统一的方法来访问容器中的项目.Qt的容器类提供了两种类型的迭代器:Java风格迭代器和STL风格迭代器.如果只是想按顺 ...
- Qt容器类——1. QList类、QLinkedList类和QVector类
在开发一个较高性能需求的应用程序时,程序员会比较关注这些容器类的运行效率,表2.1列出了QList.QLinkedList和QVector容器的时间复杂度比较. 1.QList类 QList<T ...
- Qt开发中的实用笔记三--关于各种类的零碎知识点:
1,QUuid()创建唯一标识码,在创建数据库实体ID和链接数据库QSqlDatabase时非常方便 2,QScrollArea与QScrollBar,如果是要在widget中添加窗口滑动QScrol ...
- OAF_开发系列29_实现OAF中批次处理迭代器RowSet/RowSetIterator(案例)
20150814 Created By BaoXinjian
- QT 网络编程一
QT如果要进行网络编程首先需要在.pro中添加如下代码:QT += network 在头文件中包含相关头文件 #include <QHostInfo> #include <QNetw ...
- Qt学习笔记常用容器
主要说Qt的以下几种容器 1.QList<T> 2.QLinkedList<T> 3.Map<T> 和一些常用的容器方法的使用 qSort qCopy qFind ...
- Qt之课外实践——文件操作(简单清道夫)
说明:这个小项目是关于文件操作的.主要的功能有:重复文件的查找(根据文件的大小),说白了,就是讲大小相同的文件在一起显示出来,供用户自由的选择删除.这个360云盘里的文件去重还差的很远.还有空文件夹的 ...
- Qt之Concurrent Map和Map-Reduce
简述 QtConcurrent::map().QtConcurrent::mapped()和QtConcurrent::mappedReduced()函数在一个序列中(例如:QList或QVector ...
随机推荐
- Day09_Java_作业
A:简答题 1.什么是多态,多态的前提是什么? 2.多态中成员(成员变量,成员方法,静态成员方法)的访问特点是什么? 3.多态的好处? 4.多态的弊端是什么,如果我们想访问子类的特有的功能我们应该怎么 ...
- git: failed to push some refs to
错误原因 没有添加readme文件 解决方案 git pull --rebase origin master 至此问题解决
- VUE3、ElementPlus 重构若依vue2 表单构建功能
Vue3 + ElementPlus + Vite 重构 若依Vue2 表单构建功能 若依官方的Vue3 版本发布已经有段时间了,就是这个表单构建功能一直没有安排计划去适配到Vue3! 前段时间公司需 ...
- 《深入理解Java虚拟机》读书笔记:HotSpot虚拟机对象探秘
基于实用优先的原则,以常用的虚拟机HotSpot和常用的内存区域Java堆为例,深入探讨HotSpot虚拟机在Java堆中对象分配.布局和访问的全过程.以下是本节内容的脑图. HotSpot虚拟机对象 ...
- go语言环境要这样搭建才"省钱"
go语言环境要这样搭建才省钱 目录 go语言环境要这样搭建才省钱 本篇概要 集成开发环境工具(ide) Goland或IntelliJ IDEA Visual Studio Code 其他集成开发环境 ...
- 关于 Llama 2 的一切资源,我们都帮你整理好了
Llama 2 是一个由 Meta 开发的大型语言模型,是 LLaMA 1 的继任者.Llama 2 可通过 AWS.Hugging Face 获取,并可以自由用于研究和商业用途.Llama 2 预训 ...
- 深度学习(十二)——神经网络:搭建小实战和Sequential的使用
一.torch.nn.Sequential代码栗子 官方文档:Sequential - PyTorch 2.0 documentation # Using Sequential to create a ...
- AI绘画创意文字全流程揭秘,你的终极文字艺术实操宝典
本教程收集于:AIGC从入门到精通教程汇总 AIGC技术不断更新迭代,国内出现了越来越多的新玩法,比如最近大家都在热议的AI绘画创意文字. 过去的一周,我把这些新玩法都研究了一遍,并总结了一套完整的制 ...
- Java - ReentrantLock锁分析
Java - JUC核心类AbstractQueuedSynchronizer(AQS)底层实现 一. AQS内部结构介绍 JUC是Java中一个包 java.util.concurrent . ...
- Vue【原创】可拖动列表 darg-list
可拖动排序的列表 drag-list,这个比较简单易懂,拿例子直接运行看效果就好了. 组件代码: 1 <template> 2 <ul class="list" ...