STL库的使用之容器模板类QVector使用

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()返回容器最后列表项之后的虚拟列表项

(后续还会继续更新当前的内容,如有错误,欢迎指正)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值