QList与QVector

本文探讨了Qt库中QList与QVector两种容器的区别。QList采用指针数组管理元素,实现接近常数时间复杂度的查询操作,类似于数组与链表的结合。而QVector则直接维护一个元素数组,提供快速的随机访问。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

看qt的文档,只要是不要求数据所存放的内存是连续的,都建议用QList,因为QList的查询速度跟QVecotr是差不多的。感觉有点奇怪,至少与我之前所认识的List的查询是一不样的。好吧,看看源码的。
原来QList的元素的指针是通过数组来管理的,而不是用next的方式。每当插入或者删除一个元素时,QList就会更新这个指针数组。而查询的时候,QList只需要通过下标从此指针数组中找到元素的指针,再通过元素指针找到对应的元素即可。因此其查询复杂度跟QVector一样,也是常数的。只是每次查询比QVector多了一次指针寻址而已(当然QList[idx]的调用方式还会有些不同的)。
可见QList其实不仅仅是一个链表,可以说是一个数组与链表的结合体。

再说说QVecotr,就跟我们平时理解的一回事,就是维护一个数组了的类啦。

D:\QTproject\QtDxf\dxfhelper.cpp:352: error: C2665: “QList<QVector3D>::append”: 没有重载函数可以转换所有参数类型 D:\QTproject\QtDxf\dxfhelper.cpp(352): error C2665: “QList<QVector3D>::append”: 没有重载函数可以转换所有参数类型 D:\QT\6.5.3\msvc2019_64\include\QtCore/qlist.h(447): note: 可能是“void QList<QVector3D>::append(QList<QVector3D> &&)” D:\QTproject\QtDxf\dxfhelper.cpp(352): note: “void QList<QVector3D>::append(QList<QVector3D> &&)”: 无法将参数 1 从“QVector2D”转换为“QList<QVector3D> &&” D:\QTproject\QtDxf\dxfhelper.cpp(352): note: 原因如下: 无法从“QVector2D”转换为“QList<QVector3D>” D:\QTproject\QtDxf\dxfhelper.cpp(352): note: 没有可用于执行该转换的用户定义的转换运算符,或者无法调用该运算符 D:\QT\6.5.3\msvc2019_64\include\QtCore/qlist.h(443): note: 或 “void QList<QVector3D>::append(const QList<QVector3D> &)” D:\QTproject\QtDxf\dxfhelper.cpp(352): note: “void QList<QVector3D>::append(const QList<QVector3D> &)”: 无法将参数 1 从“QVector2D”转换为“const QList<QVector3D> &” D:\QTproject\QtDxf\dxfhelper.cpp(352): note: 原因如下: 无法从“QVector2D”转换为“const QList<QVector3D>” D:\QTproject\QtDxf\dxfhelper.cpp(352): note: 没有可用于执行该转换的用户定义的转换运算符,或者无法调用该运算符 D:\QT\6.5.3\msvc2019_64\include\QtCore/qlist.h(435): note: 或 “void QList<QVector3D>::append(QVector3D &&)” D:\QTproject\QtDxf\dxfhelper.cpp(352): note: “void QList<QVector3D>::append(QVector3D &&)”: 无法将参数 1 从“QVector2D”转换为“QVector3D &&” D:\QTproject\QtDxf\dxfhelper.cpp(352): note: 原因如下: 无法从“QVector2D”转换为“T” with [ T=QVector3D ] D:\QTproject\QtDxf\dxfhelper.cpp(352): note: 没有可用于执行该转换的用户定义的转换运算符,或者无法调用该运算符 D:\QT\6.5.3\msvc2019_64\include\QtCore/qlist.h(433): note: 或 “void QList<QVector3D>::append(const QVector3D &)” D:\QTproject\QtDxf\dxfhelper.cpp(352): note: “void QList<QVector3D>::append(const QVector3D &)”: 无法将参数 1 从“QVector2D”转换为“const QVector3D &” D:\QTproject\QtDxf\dxfhelper.cpp(352): note: 原因如下: 无法从“QVector2D”转换为“const T” with [ T=QVector3D ] D:\QTproject\QtDxf\dxfhelper.cpp(352): note: 没有可用于执行该转换的用户定义的转换运算符,或者无法调用该运算符 D:\QTproject\QtDxf\d
04-01
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值