Qt:容器类的迭代

容器类的迭代

Java类型迭代器

两个Java类型迭代器:

  • 用于只读操作
  • 用于读写操作
容器类 只读迭代器 读写迭代器
QList<T>,QQueue<T> QListIterator<T> QMutableListIterator<T>
QLinkedList<T> QLinkedListIterator<T> QMutableLinkedListIterator<T>
QVector<T>,QStack<T> QVectorIterator<T> QMutbaleVectorIterator<T>
QSet<T> QSetIterator<T> QMutableSetIterator<T>
QMap<Key, T>,QMultiMap<Key, T> QMapIterator<Key, T> QMutableMapIterator<Key, T>
QHash<Key, T>,QMultiHash<Key, T> QHashIterator<Key, T> QMutableHashIterator<Key, T>

QMap和QHash等关联荣区的迭代器用法相同,QList和QLinkedList、QSet等容器类的用法相同。

顺序容器类的迭代器使用

示例如下:

cpp 复制代码
QList<QString> list;
list << "A" << "B" << "C" << "D";
QListIterator<QString> iter(list);
while(iter.hasNext()) {
	qDebug() << iter.next();
}

// 也可以反向遍历
while(iter.hasPrevious()) {
	qDebug() << iter.previous();
}

QListIterator常用函数

函数名 功能
void toFront() 迭代器移动到列表的最前面(第一个数据项之前)
void toBack() 迭代器移动到列表的最后面(最后一个数据项之后)
bool hasNext() 如果迭代器不是位于列表最后位置,返回true
const T &next() 返回下一个数据项,并且迭代器后移一个位置
const T &peekNext() 返回下一个数据项,迭代器不移动
bool hasPrevious() 如果迭代器不是位于列表最前面,返回true
const T &previous() 返回前一个数据项,并且迭代器前移一个位置
const T &peekPrevious() 返回前一个数据项,迭代器不移动

!Note

QListIterator只能访问容器内的数据项,不能修改,如果有修改需求,使用带mutable版本的迭代器。

关联容器的迭代器使用

示例:

cpp 复制代码
QMap<QString, QString> map;
map["Paris"] = "France";
map["New York"] = "USA";
map["Bei Jing"] = "China";

QMutableMapIterator<QString, QString> iter(map);
while(iter.hasNext()) {
	if(iter.next().key().endsWith("City")) {
		iter.remove();
	}
}

其实用法和前面的顺序容器差不多,就是加了key-value而已。

STL类型迭代器

同样的也是有两种类型的迭代器,一种是只读,一种是可读写的迭代器。

容器类 只读迭代器 读写迭代器
QList<T>, QQueue<T> QList<T>::const_iterator QList<T>::iterator
QLinkedList<T> QLinkedList<T>::const_iterator QLinkedList<T>::iterator
QVector<T>, QStack<T> QVector<T>::const_iterator QVector<T>::iterator
QSet<T> QSet<T>::const_iterator QSet<T>::iterator
QMap<Key, T> QMap<Key, T>::const_iterator QMap<Key, T>::iterator
QMultiMap<Key, T> QMap<Key, T>::const_iterator QMap<Key, T>::iterator
QHash<Key, T> QHash<Key, T>::const_iterator QHash<Key, T>::iterator
QMultiHash<Key, T> QHash<Key, T>::const_iterator QHash<Key, T>::iterator

STL类型的迭代器是数组的指针,所以++运算符使迭代器指向下一个数据项,*运算符返回数据项的内容

示例:

cpp 复制代码
QList<QString> list;
list << "A" << "B" << "C" << "D";
QList<QString>::const_iterator iter;
for (iter = list.constBegin(); iter != iter.constEnd(); ++iter) {
	qDebug() << *iter;
}

QMap<QString, QString> map;
map["Paris"] = "France";
map["New York"] = "USA";
map["Bei Jing"] = "China";
for(QMap<QString, QString>::const_iterator it = map.constBegin(); it != map.constEnd(); ++iter) {
	qDebug() << it.key() << " : " << it.value(); 
}

foreach关键字

如果指向遍历容器中的所有项,可以使用foreach关键字:

cpp 复制代码
foreach(variable, container)

示例:

cpp 复制代码
QList<QString> list;
...
foreach(QString str, list) {
	qDebug () << str;
}

QMap<QString, int> map;
foreach(const QString &str, map.keys()) {
	qDebug() << str << ": " << map.value(str);
}
相关推荐
不会代码的小猴9 分钟前
21. 泛型编程上
开发语言·c++·笔记·算法
青瓦梦滋34 分钟前
传输层UDP/TCP协议
linux·网络·c++·网络协议·tcp/ip·udp
一只旭宝1 小时前
细讲C加加【9】C++ std::function与std::bind详解|仿函数、绑定器、类成员绑定、占位符、成员偏移指针
开发语言·c++·算法
coder!mq3 小时前
说几个常见的语法糖?
java·开发语言·算法
gugucoding3 小时前
38. 【Java】Stream API(下):高级操作与性能
java·开发语言
Lhan.zzZ3 小时前
在 Visual Studio 2022 中打造可扩展的动态链接库模块:从零搭建到原理解析
开发语言·c++·visual studio
心平气和量大福大4 小时前
android-实例-蒲公英-更新与安装-5-签名与生成APK
android·java·开发语言
码哥DFS4 小时前
构造函数、实例对象、对象原型 ----三者关系
开发语言·javascript·原型模式
quantdash_cc4 小时前
告别自建 Requests/BS4 网页爬虫:基于 QuantDash 搭建零维保的高性能量化行情流水线
开发语言·爬虫·python·pandas·量化·quantdash
ydd1001004 小时前
寻找两个正序数组的中位数 Java 题解,二分分割详解
java·开发语言