Qt容器类及其遍历(Java风格和STL风格迭代器)

1、Qt提供了一组通用的基于模板的容器类。Qt的容器类对比C++的标准准模板库中的容器类,更轻量、更安全、更容易使用;此外,Qt的容器类还在速度、内存消耗和内联(inline)代码等方面进行了优化

2、存储在Qt容器类中的数据必须是可赋值的数据类型,即,这种数据类型必须提供一个默认的构造函数(不需参数的构造函数)、一个复制构造函数和一个赋值操作运算符。

3、这些数据类型包含通常使用的大多数数据类型,包括基本数据类型(如int、double等)和Qt的一些数据类型(如QString、QDate、QTime等)。但是,Qt的QObject的及其子类(如QWidget、QDialog等)是不能存储在容器中的,例如:

QList<QToolBar> list; //错误,因为QObject及其子类没有复制构造函数和赋值操作运算符。

但是,可以存储QObject及其子类的指针。例如:

QList<QToolBar*> list;

4**、Qt的容器类是可以嵌套的**,例如:

QHash<QString, QList<double> >; //键类型是QString,值类型是QList<double>

注意:在最后两个“>”之间要保留一个空格,否则,编译器会将两个“>”解释为一个“>>”,导致无法通过编译。

5、Qt的容器类有两种遍历方法
(1)Java风格的迭代器;
(2)STL风格的迭代器,效率略胜一筹。

6、QList类
QList 维护了一个指针数组,该数组存储的指针指向QList存储的列表项的内容。因此,QList提供了基于下标的快速访问。
例:

QList<QString> m_list;
QString m_str("this is a test string");
m_list << m_str;
qDebug() << m_list[0] << "how are you";

7、QLinedList类
不能使用下标,只能使用迭代器访问它的数据项。

8、QVector类
既可以使用下标访问数据项,也可以使用迭代器访问数据项。

9、Java风格迭代器遍历容器
对于每个容器类,Qt都提供了两种类型的Java风格迭代器数据类型,即,只读访问和读写访问。

例如:对于List类,只读迭代器类:QListIterator;读写迭代器类:QMutableListIterator

Java风格迭代器的迭代点位于列表项的中间,而不是直接指向某个列表项。因此,它的迭代点或者在第一个列表项的前面,或者在两个列表项之间,或者在最后一个列表项之后。

(1)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值