一.概述
QVector是一个提供动态数组的模板类,它将其项存储在相邻内存中,并提供基于索引的快速访问操作。
QVector 本质就是封装好的数组,向量的相邻元素在内存里是连续存储的,可以用数组下标访问,其读取和修改元素的操作是非常快的
QVector应该是我们实际开发中的默认首选序列式容器。QVector通常比QList性能更好,因为QVector总是将它的项按顺序存储在内存中;对于QList来说,将在堆上分配它的项,除非sizeof(T) <= sizeof(void*)并且T已经使用Q_DECLARE_TYPEINFO声明为Q_MOVABLE_TYPE或Q_PRIMITIVE_TYPE。
注意:QVector和QVarLengthArray都保证了c兼容的数组布局。QList没有,如果的应用程序必须与C API接口,这可能很重要。
二.程序示例
1.包含头文件 #include <QVector>
2.声明初始化
下面是一个存储整数的QVector和存储QString的QVector的例子:
QVector<int> integerVector;
QVector<QString> stringVector;
通常,vector是用初始大小创建的。
例如,下面的代码构造了一个包含200个元素的QVector:
QVector<QString> vector(200);
元素会自动用默认构造的值初始化(如果是int、double之类的话就是 0, QString就是空字符串)。如果你想用不同的值初始化vector,将该值作为第二个参数传递给构造函数:
QVector<QString> vector(200, "Pass");
还可以在任何时候调用 fill() 来用值填充 QVector:
QVector<QString> vector(3);
vector.fill("Yes");
// vector: ["Yes", "Yes", "Yes"]
vector.fill("hi", 5);
// vector: ["hi", "hi", "hi", "hi", "hi"]
3.获取元素和链表信息
(1)使用at()成员函数访问QVector中的数据
const T &QVector::at(int i) const
例如:
for (int i = 0; i < vector.size(); ++i) {
if (vector.at(i) == "iriczhao")
cout << "iriczhao position :" << i << Qt::endl;
}
(2)如果你想找到一个向量中某个特定值的所有出现情况,可以使用indexOf()或lastIndexOf()。 前者从给定的索引位置开始向前搜索,后者向后搜索。如果找到匹配项,两者都会返回匹配项的索引;否则,返回-1。例如:
int i = vector.indexOf("Harumi");
if (i != -1)