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 ...
随机推荐
- Linux切换Root权限配置和无法切换排查
1.wheel组 普通用户禁止su切换root 在默认的情况下,普通用户通过su可以切换到root用户下,为了加强系统安全性,使用Linux的特殊用户组wheel来实现,只有用户加入到wheel组当中 ...
- Linux实现双击自动安装deb文件
在Linux中,有几个常用的软件可以实现双击自动安装.deb文件的功能.以下是一些推荐的软件: 1. GDebi:GDebi是一个轻量级的图形化工具,专门用于安装.deb文件.它可以解决依赖关系,并提 ...
- 2023-7-26 Dynamic替代部分反射的简单实现方式
Dynamic与反射的使用 [作者]长生 实体类 public class School{ public int GetAge(){ return 100; } } 使用反射获取对象里的方法 Scho ...
- 显示Label标签
1 from PyQt5.QtWidgets import QApplication, QLabel, QWidget, QVBoxLayout 2 from PyQt5.QtCore import ...
- pywintypes.com_error: (-2147418111, '被呼叫方拒绝接收呼叫。', None, None)
将打开的excel全部关闭,即可解决问题.
- 记一次 .NET某培训学校系统 内存碎片化分析
一:背景 1. 讲故事 前些天有位朋友微信上找到我,说他们学校的Web系统内存一直下不去,让我看下到底是怎么回事,老规矩让朋友生成一个dump文件丢给我,看一下便知. 二:WinDbg 分析 1. 托 ...
- 基于inotify-tools和rsync实现文件实时同步
前言 系统:centos 7 inotify-tools版本:3.14(3.22版本测试有问题,所以找的比较旧的一版) 主机IP: 192.168.137.7(服务端,接收同步文件) 192.168. ...
- 【python】调用钉钉机器人发起通知
有时候需要做个某些服务的状态监控,用钉钉机器人发通知挺方便的.可以用shell脚本配合crontab检测状态,检测到异常就调用python脚本发起告警. python内容 此处用的python3,需要 ...
- Dokcer学习之旅(1)——运行一个简单的容器
基本概念 镜像 我们都知道,操作系统分为 内核 和 用户空间.对于 Linux 而言,内核启动后,会挂载 root 文件系统为其提供用户空间支持.而 Docker 镜像(Image),就相当于是一个 ...
- __wakeup()魔术方法绕过(CVE-2016-7124)
__wakeup()魔术方法绕过(CVE-2016-7124) 漏洞简介 在php反序列化数据过程中,如果类中存在__wakeup方法,调用 unserilize() 方法前则先调用__wakeup方 ...