Qt 容器类

本文详细介绍了Qt中的三种容器类:QList,包括常规下标遍历、只读迭代器和读写迭代器的使用;QLinkedList,作为链式列表,它不支持下标访问,但可用迭代器操作;以及QMap和QHash,提供键值对的映射功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. QList

QList 是最常用的容器类,其内部维护了一个指针数组,因此可以支持通过下标来访问。

(1) 常规下标遍历

#include <QtCore/QCoreApplication>
#include <QDebug>
int main(int argc, char *argv[])
{
	QCoreApplication a(argc, argv);
	QString str1 = "One";
	QString str2 = "Two";
	QString str3 = "Three";
	QList <QString> list;
	list << str1 << str2 << str3;
	/*遍历方法 1: 常规下标*/
	for (int i = 0; i < list.size(); i++)
	{
		qDebug() << list[i];
		//qDebug() << list.at(i);
	}

    ...
}

(2) 只读迭代器

QListIterator<T> 是Java风格的只读迭代器。支持的操作列表如下:

API使用说明
toBack将迭代点移动到最后一个列表项后面
hasPrevious检查当前迭代点之前是否具有列表项
previous返回前一个列表项的内容,并将迭代点前移1位
hasNext检查当前迭代点之后是否具有列表项
next返回后一个列表项的内容,并将迭代点后移1位
toFront将迭代点移动到最前端,(第一个列表项之前)
peekNext返回后一个列表项的内容,但不移动迭代点
peekPrevious返回前一个列表项的内容,但不移动迭代点
findNext查找指定的列表项,并将迭代点移动到该列表项之后。并返回True, 若未找到返回False, 迭代点移动到列表后端
findPrevious类似于findNext
#include <QtCore/QCoreApplication>
#include <QDebug>
int main(int argc, char *argv[])
{
	QCoreApplication a(argc, argv);
	QString str1 = "One";
	QString str2 = "Two";
	QString str3 = "Three";
	QList <QString> list;
	list << str1 << str2 << str3;
	/*遍历方法: 迭代器*/
	QListIterator<QString> j(list);
	for (; j.hasNext();)
		qDebug() << j.next();
	return a.exec();
}

(3) 读写迭代器

QMutableListIterator<T> 除支持只读迭代器的属性外,还支持写入,删除等操作。

API使用说明
insert插入列表项
remove删除列表项
setValue修改列表项的值

 

 

2. QLinkedList

链式列表,以非连续的内存块保存数据。不能使用下标,必须使用迭代器来访问。迭代器与QList 用法一致

只读迭代器读写迭代器
QLinkedListIteratorQMutableLinkedListIterator

 

3. QMap 与 QHash

QMap<key,T>  提供了一个Key值到T的映射

 

	QMap<QString, int> map;
	map.insert("KEY1", 1);
	map.insert("KEY2", 2);
	map.insert("KEY3", 3);

	QMapIterator<QString, int> i(map);
	for (; i.hasNext();)
		qDebug() << i.next().key();

	for (i.toFront(); i.hasNext();)
		qDebug() << i.next().value();


	QMutableMapIterator<QString, int> j(map);

	if (j.findNext(2))
		j.setValue(4);
	QMapIterator<QString, int> k(map);
	for (k.toFront(); k.hasNext();)
		qDebug() << k.next().value();

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值