QT不仅支持C++的STL模板库,同时自己也定义了一套容器类和与之操作的算法类,使用QT定义的这一套库,可以使在各个平台的表现相同。QT的这些容器被设计为更轻便,更安全和更容易使用。容器类是隐含共享(implicitly)的,可重入(reentrant)的和线程安全的。为容器遍历提供了两种迭代器(java-style,STL-style),并且QT提供了foreach关键字,更加方便元素遍历。
连续容器:
QVector<T>
它是QT里最常见的容器类,它对应STL中的Vector<T>容器,是动态数组,提供快速的索引存取。
QList<T> QLinkList<T> QVarLengthArray<T>提供类似的功能。
可以参考帮助文档,查看QList的具体使用方法,以下列出部分使用示例:
1.创建各种类型的vector:
QVector<int> integerVector;
QVector<QString> stringVector;
2.创建一定数目项的vector
QVector<QString> vector(200);
3.带初始化的创建vector
QVector<QString> vector(200, "Pass");
也可以使用fill赋值:
QVector<QString> vector(3);
vector.fill("Yes");
// vector: ["Yes", "Yes", "Yes"]
vector.fill("oh", 5);
// vector: ["oh", "oh", "oh", "oh", "oh"]
4.QVector像c++的Vector一样提供[]下标操作,并从0项开始。还提供at()的只读操作,at()比[]更快,因为它不会导致深度复制。
if (vector[0] == "Liz")
vector[0] = "Elizabeth";
for (int i = 0; i < vector.size(); ++i) {
if (vector.at(i) == "Alfonso")
cout << "Found Alfonso at position " << i << endl;
}
5.你可以使用indexOf,lastIndexOf来查询获取某项值的索引:
QVector<QString> vector;
vector << "A" << "B" << "C" << "B" << "A";
vector.indexOf("B"); // returns 1
vector.indexOf("B", 1); // returns 1
vector.indexOf("B", 2); // returns 3
vector.indexOf("X"); // returns -1
vector.lastIndexOf("B"); // returns 3
vector.lastIndexOf("B", 3); // returns 3
vector.lastIndexOf("B", 2); // returns 1
vector.lastIndexOf("X"); // returns -1
也可以用contains()查看是否包含某元素,返回bool值。
6.通过append,operator<<,prepend,insert添加元素。(对于较大的vector来说,在开头和中间插入项都是相当耗时的。这种情况更适合使用QLinkedList<T>)
QVector<QString> vector(0);
vector.append("one");
vector.append("two");
vector.append("three");
// vector: ["one", "two", "three"]
QVector<QString> vector(0);
vector << “one” << “two” << “three”;
// vector: ["one", "two", "three"]
QVector<QString> vector;
vector.prepend("one");
vector.prepend("two");
vector.prepend("three");
// vector: ["three", "two", "one"]
QVector<QString> vector;
vector << "alpha" << "beta" << "delta";