(一) 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 迭代器的更多相关文章

  1. Qt迭代器(Java类型和STL类型)详解

    迭代器为访问容器类里的数据项提供了统一的方法,Qt 有两种迭代器类:Java 类型的迭代器和 STL 类型的迭代器. 两者比较,Java 类型的迭代器更易于使用,且提供一些高级功能,而 STL 类型的 ...

  2. Qt中常用知识点

    1:QRegExp 正则表达式 QRegExp regExp("[a-zA-Z][1-9][0-9]{0,2}"); xxx->setValidator(new QRegEx ...

  3. Qt容器类之二:迭代器

    一.介绍 遍历一个容器可以使用迭代器(iterators)来完成,迭代器提供了一个统一的方法来访问容器中的项目.Qt的容器类提供了两种类型的迭代器:Java风格迭代器和STL风格迭代器.如果只是想按顺 ...

  4. Qt容器类——1. QList类、QLinkedList类和QVector类

    在开发一个较高性能需求的应用程序时,程序员会比较关注这些容器类的运行效率,表2.1列出了QList.QLinkedList和QVector容器的时间复杂度比较. 1.QList类 QList<T ...

  5. Qt开发中的实用笔记三--关于各种类的零碎知识点:

    1,QUuid()创建唯一标识码,在创建数据库实体ID和链接数据库QSqlDatabase时非常方便 2,QScrollArea与QScrollBar,如果是要在widget中添加窗口滑动QScrol ...

  6. OAF_开发系列29_实现OAF中批次处理迭代器RowSet/RowSetIterator(案例)

    20150814 Created By BaoXinjian

  7. QT 网络编程一

    QT如果要进行网络编程首先需要在.pro中添加如下代码:QT += network 在头文件中包含相关头文件 #include <QHostInfo> #include <QNetw ...

  8. Qt学习笔记常用容器

    主要说Qt的以下几种容器 1.QList<T> 2.QLinkedList<T> 3.Map<T> 和一些常用的容器方法的使用 qSort qCopy qFind ...

  9. Qt之课外实践——文件操作(简单清道夫)

    说明:这个小项目是关于文件操作的.主要的功能有:重复文件的查找(根据文件的大小),说白了,就是讲大小相同的文件在一起显示出来,供用户自由的选择删除.这个360云盘里的文件去重还差的很远.还有空文件夹的 ...

  10. Qt之Concurrent Map和Map-Reduce

    简述 QtConcurrent::map().QtConcurrent::mapped()和QtConcurrent::mappedReduced()函数在一个序列中(例如:QList或QVector ...

随机推荐

  1. Flutter ncnn 使用

    Flutter 实现手机端 App,如果想利用 AI 模型添加新颖的功能,那么 ncnn 就是一种可考虑的手机端推理模型的框架. 本文即是 Flutter 上使用 ncnn 做模型推理的实践分享.有如 ...

  2. 2021-7-30 MySql函数的使用归类整理

    Mysql字符的使用 SELECT ASCII(user_password) as 阿斯克码 FROM users;#返回首字符的ascii码 SELECT CHAR_LENGTH(user_pass ...

  3. JS优化技巧,解决冗余代码

    1. 使用箭头函数简化函数定义 // 传统函数定义 function add(a, b) { return a + b; } // 箭头函数简化 const add = (a, b) => a ...

  4. json虽然简单,但这些细节你未必知道

    基本介绍 JSON的全称是JavaScript Object Notation,它并不是编程语言,而是一种可以在服务器和客户端之间传输的数据格式,本来是JavaScript的子集,但现在已独立存在于各 ...

  5. Python类型提示

    摘自:Python 类型提示简介 - FastAPI (tiangolo.com) 快速入门 类型提示用于声明一个变量的类型,在Python 3.6+版本的时候引入. 示例: def get_full ...

  6. Hugging Face 的文本生成和大语言模型的开源生态

    [更新于 2023 年 7 月 23 日: 添加 Llama 2.] 文本生成和对话技术已经出现多年了.早期的挑战在于通过设置参数和分辨偏差,同时控制好文本忠实性和多样性.更忠实的输出一般更缺少创造性 ...

  7. 开源.NetCore通用工具库Xmtool使用连载 - HTTP请求篇

    [Github源码] <上一篇> 介绍了Xmtool工具库中的XML操作类库,今天我们继续为大家介绍其中的HTTP请求类库. 在现如今的软件需求场景中,HTTP网络请求几乎是开发过程中必然 ...

  8. 【opencv】传统图像识别:hog+svm行人识别实战

    实战工具:python3.7+pycharm+opencv4.6算法知识:HOG特征提取.SVM模型构建实战目的:本次实战的目的是熟悉HOG+SVM工作流算法,初步掌握图像分类的传统算法.实战记录:本 ...

  9. Docker数据持久化与数据共享

    上篇文章的最后我们使用Docker部署了一个纯前端项目,但还有一个很重要的问题就是容器中产生的数据(比如log文件),容器一旦被删除,容器内的所有数据也就没有了,为了避免这个问题我们可以将数据存储到容 ...

  10. vue3封装筛选项

    背景 项目开发中遇到筛选项,并且几个页面都有使用,依次写,太过于繁琐 筛选项解构如下 封装全局组件fjj-content <template> <div class="fj ...