特征: 1,平台一致性,并且都具有隐含共享的优点。2,易于使用的迭代器类。
- 连续容器类
QVector<T>
类似数组的容器类。在尾部插入数据高效,在头部或中间插入数据低效。
QLinkedList<T>
不支持快速的随机访问。支持常量时间的插入或删除。
QList<T>
通常状况下最好调用的连续容器。支持随机访问,并且插入,删除操作相对高效。
不适用:
极大列表或必须数据保存在相邻的内存空间
T可以是int,doule等基本类型,指针类型,具有默认构造函数,复制构造函数或赋值操作符的类似的类。
不能直接适用继承QObject的数据类型,但是可以用它的指正。QObject禁止copy。
隐含共享解释: String a = "test"; String b = a; 内存有数据结构会保存一个引用计数的参数,多一个就+1,减少的时候就减去1。
遍历容器类的方法一般有: 类似Java的迭代器和类似c++的迭代器 2种。
注意:
使用类似java迭代器遍历容器的时候,调用next(),就会指针前进一步。
QHash<QString, QString> hash;
hash.insert("t", "test2");
hash.insert("b", "test1");
hash.insert("c", "test3");
QHashIterator<QString, QString> hasIterator(hash);
while(hasIterator.hasNext()) {
hasIterator.next();
qDebug() << "key: " << hasIterator.key() << " value: " << hasIterator.value();
}
- 关联容器类
QMap<K, T>
是一个使用升序键值对的关联容器类。(默认按照K的升序排序)
QHash<K, T>
类似QMap<K, T> 但是对K有要求,K要能够提供operator==操作和toHash()函数。
Qt还提供基于QHash<K, T>的Qcace<K,T>和QSet<K>
- 算法
qFind() :查找容器中特定的值。(实际使用线性搜索)
qBinayyFind(): 查找容器中特定的值,但它认为容器是升序排序的。(实际上使用的快速二分法搜索)
qFill():采用特定的值组装一个容器。
qCopy():将一个容器的值拷贝到另外一个容器。
qSort():升序排序一个容器。
qDeleteAll():对存放在容器中的每一个指针调用delete。
QString:支持16位的Unicode。
QByteArray:存储原始的二进制数据以及8位编码的文本字符串。