Qt中提供了一组通用的基于模板的容器类,对比C++中的STL库的容器类,Qt的这些容器类更轻量、更安全并且容易使用同时在速度、内存消耗、内联代码等方面进行了优化,存储在Qt的容器中数据必须是可赋值的数据类型,数据类型必须提供一个默认的构造函数、一个复制构造函数和一个赋值操作运算符
今天介绍关于QVector容器类的使用方法
QVector是Qt中的通用容器类,它是有序的存储元素,并提供基于索引的快速访问方法;
QList<T>、QLinkList<T>、QVector<T>、QVarLengthArray<T>的api接口和功能类似,可以互换使用,性能上有些区别:
1.首选QVector类,它的性能比QList好,因为QVector中的项是有序的存储在内存中,而QList中的项是存储在堆上除非Qlist的sizeof(T)<=sizeof(void*)并且T已经使用Q_DECLARE_TYPEINFO声明为Q_MOVABLE_TYPE或Q_PRIMITIVE_TYPE
2.QList主要用于Qt中api接口函数的传参和返回值
3.如果您需要一个真正的链表,它保证在链表中间插入的时间是常数,并且对项使用迭代器而不是索引,那么可以使用QLinkedList。
注意:QVector和QVarLengthArray都适用C的数组布局,QList不行;在调用C的API的应用程序中很重要;
只要引用的项仍然在容器中,QLinkedList的迭代器和对堆分配QList的引用就仍然有效。但对于QVector和非堆分配QList的迭代器和引用则无效
下面是关于一些QVector类的方法的使用
1.定义一个QVector的数组
QVector<QString> vector;
2.定义并初始化一个大小为10个元素项的vector
QVector vector(10);
3.想要修改某个元素可以使用索引运算符[],只是访问的话使用at()方法(at()访问速度比[]快,它不需要深拷贝)
vector[1]="Elizabeth";//修改vector中的元素值
cout<<vector.at(1)<<endl;//访问vector的第一个元素,
4.查找某个元素的索引值
//成功返回所引,失败返回-1
vector.indexof("Alfonso");
5.判断某个元素是否存在
if(vector.contains("Alfonso"))
cout<<"Alfonso存在"<<endl;
else
cout<<"Alfonso不存在"<<endl;
QVector还提供了这些方法:insert、replace、remove、prepend、append;对于大容量的QVector想要快速的插入和删除,建议还是使用QLsit或者QLinkList替代;
QVector中的STL风格的迭代器有:const_iterator、iterator、reverse_iterator
只读迭代器const_iterator的访问速度比读写iterator迭代器访问速度快
QVector::begin()返回指向第一个列表项的迭代器,QVector::end()返回容器最后列表项之后的虚拟列表项
(后续还会继续更新当前的内容,如有错误,欢迎指正)