常用容器类简介表
类 |
简介 |
QList<T> |
这是目前最常用的容器类。它存储了给定类型的值的一个列表,而这些值可以通过索引访问。在内部,QList使用数组来实现,以确保进行快速的基于索引的访问。可以使用QList::append()和QList::prepend()在列表的俩端添加项目,也可以使用QList::insert()在列表的中间插入项目。常用的QStringList继承自QList<QString> |
QLinedList<T> |
除了使用迭代器而不使用整数索引进行项目访问外,它基本与QList相同。当向一个很大的列表的中间插入项目时,QLinkedList比QList拥有更好的性能,而且它拥有更好的迭代器语义(当迭代器QLinkedList的一个项目后,只要这个项目还存在,那么迭代器就依然有效;二挡迭代器指定QList中的一个项目后,如果QList进行了插入或者删除操作,那么这个迭代器就无效了) |
QVector<T> |
它在内存的相邻位置存储给定类型的值的一个数组。在vertor的前面或者中间插入项目是非常缓慢的,因为这样可能导致大量的项目再村内中移动一个位置 |
QStack<T> |
它是QVector的一个便捷子类,提供了后进先出(LIFO)语义。它添加了push(),pop()和top()等函数 |
QQueue<T> |
它是QList的一个便捷子类,提供了先进先出(FIFO)语义。它添加了enqueue(),dequeue()和head()等函数 |
QSet<T> |
它提供了一个可以快速查询单值的数学集 |
QMap<Key,T> |
它提供了一个字典(关联数组),将Key类型的键值映射到T类型的值上。一般每一个键关联一个单一的值。QMap使用键顺序来存储它的数据;如果不关心存储顺序,那么可以使用QHash来代替它,因为QHash速度更快 |
QMultiMap<Key,T> |
是QMap的一个便捷类,提供了实现多值映射的接口函数,例如一个键可以联多个值 |
QHash<Key,t> |
与QMap拥有基本相同的接口,但是它的查找速度更快。QHash的数据是任意的顺序存储的 |
QMultiHash<Key,T> |
它四QHash的一个便捷类提供了实现多值散列的接口函数 |
Java风格迭代器
容器 |
只读迭代器 |
读/写迭代器 |
QList<T>,QQueue<T> |
QListIterator<T> |
QMutableListIterator() |
QLikeedList<T> |
QLikeedListIterator<T> |
QMutableLikeedListIterator() |
QVector<T>,QStack<T> |
QVectorIterator<T> |
QMutableVectorIterator<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> |
QListIterator常用API
函数 |
行为 |
toFront() |
将迭代器移动到列表的最前面(第一个项目之前) |
toBack() |
将迭代器移动到列表的最后面(最后一个项目之后) |
hasNext() |
如果迭代器没有到达列表的最后面,那么返回true |
next() |
返回下一个项目,并使迭代器前移一个位置 |
peekNext() |
返回下一个项目,但不移动迭代器 |
hasPrevious() |
如果迭代器没有到达列表的最前面,那么返回true |
Previous() |
返回前一个项目,并使迭代器返回移动一个位置 |
peekPrevious() |
返回前一个项目,但不移动迭代器 |
STL风格迭代器
容器 |
只读迭代器 |
读/写迭代器 |
QList<T>,QQueue<T> |
QList<T>::const_iterator |
QList<T>::iterator |
QLikeedList<T> |
QLikeedList<T>::const_iterator |
QLikeedList<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> QMultiMap<Key,T> |
QMap<Key,T>::const_iterator
|
QMap<Key,T>::iterator
|
QHash<Key,T> QMultiHash<Key,T> |
QHash<Key,T>::const_iterator
|
QHash<Key,T>::iterator
|
STL风格迭代器常用API
表达式 |
行为 |
*i |
返回当前项目 |
++i |
前移迭代器到下一个项目 |
i+=n |
使迭代器前移n个项目 |
--i |
使迭代器往回移动一个项目 |
i-=n |
使迭代器返回移动n个项目 |
i-j |
返回迭代器i和迭代器j之间的项目的数目 |
QString
QString类提供了一个Unicode字符串。QString使用隐式共享来减少内存使用和避免不必要的数据复制。
- 隐式共享
隐式共享又称为写时复制。
- 编辑操作
- 查询操作
- 转换操作
QString类函数参数格式
格式 |
含义 |
e |
格式如:[-]9.9e [+]999 |
E |
格式如:[-]9.9E [+]999 |
f |
格式如:[-]9.9 |
g |
使用e或者f格式,选择其中最精简的 |
G |
使用E或者f格式,选择其中最精简的 |
QByteArray和QVariant
QBytrArray类提供了一个字节数组,它可以用来存储原始字节(包括’\0’)和传统的以’\0’结尾的8位字符串。使用QBytrArray比使用const char*要方便很多,在后台,它总是保证数据以一个’\0’结尾,而且使用隐式共享来减少内存的使用和避免不必要的数据复制。
QVariant类像是常见的Qt数据类型的一个共用体,一个QVariant对象在一个时间只保存一个单一类型的单一的值(有些类型可能是多值的,比如字符串列表)。可以使用toT()(T表示一种数据类型)函数将QVariant对象转换为T类型,并且获取它的值。这里toT()函数会复制以前的QVariant对象,然后对其进行转换,所以以前的QVariant对象并不会改变。
可以自动进行的类型转换
类型 |
自动转换到 |
Bool |
Char、Double、Int、LongLong、String、UInt、ULongLong |
ByteArray |
Double、Int、LongLong、String、UInt、ULongLong |
Char |
Bool、Int、UInt、LongLong、ULongLong |
Color |
String |
Date |
DateTime、String |
DateTime |
Date、String、Time |
Double |
Bool、Int、LongLong、String、UInt、ULongLong |
Font |
String |
Int |
Bool、Char、Double、LongLong、String、UInt、ULongLong |
KeySequence |
Int、String |
List |
StringList(如果列表中的项目可以转换为字符串) |
LongLong |
Bool、ByteArray、Char、Double、Int、String、UInt、ULongLong |
Point |
PointF |
Rect |
RectF |
String |
Bool、ByteArray、Char、Color、Data、DateTime、Double、Font、Int、KeySequence、LongLong、StringList、Time、UInt、ULongLong |
StringList |
List、String(如果列表中只包含一个项目) |
Time |
String |
UInt |
Bool、Char、Double、Int、LongLong、String、ULongLong |
ULongLong |
Bool、Char、Double、Int、LongLong、String、UInt |