引言
Qt中提供了一系列的基于模板的容器类,这些类被用来存储指定类型的元素。例如,你需要一个可变长的QString的数组,你可以使用QVector
Qt提供而来如下的一些序列化的容器:QList, QLinkedList, QVector, QStack, and QQueue. 对于大多数的程序,QList基本就能满足要求,尽管它是以array-list实现的,但它同样可以提供快速的插入操作。如果你真的必须要使用linked-list,那么你可以使用QLinkedList;如果你想数组元素占据一段连续的存储空间,那么你可以使用QVector. 最后 QStack 和 QQueue 提供方便的LIFO和FIFO 的功能.
Qt同样提供了如下的一些关联容器:QMap, QMultiMap, QHash, QMultiHash, and QSet. 其中带有"Multi"的容器,他们支持1key - n value这样的键值对。 带有"hash"的容器使用Hash函数替代了二叉树查找,从而提供了快速查找的功能。
QCache 和 QContiguousCache提供在高速缓冲存储器内进行高效的hash查找。
1> QLinkedList
2> QVector
3> QList
4>QStack
5> QQueue
6> QSet
7> QMap
8> QMultiMap
9> QHash
10> QMultiHash
1> QList Java风格的调用:
//Java-style
QList list_javaSty;
list_javaSty << "111" << "222" << "333" << "444";
list_javaSty << "555";
QListIterator it(list_javaSty);
while (it.hasNext())
qDebug() << it.next();
//stl-style
QList list_stlSty;
list_stlSty << "AAA" << "BBB" << "CCC" << "DDD";
list_stlSty << "EEE";
QList::iterator i;
for (i = list_stlSty.begin(); i != list_stlSty.end(); ++i)
qDebug() << *i;
QList int_list;
int_list << 23 << 42 << 67 << 23 << 83;
QMutableListIterator i(int_list);
while (i.hasNext())
{
if (i.next() > 50)
i.setValue(0);
qDebug() << i.value();
}
2> QMap QMap中的key-value对是升序排列的 插入和删除操作中都可以使用[]运算符,其下标为key;为避免创建不必要的空值,推荐用vlaue()而不是[]从QMap中取值。 QMap
例子: 删除键值以city结尾的元素。
QMap map;
map.insert("Paris", "France");
map.insert("Guatemala City", "Guatemala");
map.insert("Mexico City", "Mexico");
map.insert("Moscow", "Russia");
QMutableMapIterator i(map);
while (i.hasNext()) {
if (i.next().key().endsWith("City"))
i.remove();
}
foreach (const QString &str, map.keys())
qDebug() << str << ":" << map.value(str);