*对大多数操作来说,我们用QList就可以了。其API是基于索引(index)的,因此用起来比QLinkedList更方便(QLinkedList的API是基于迭代器的)。QList比QVector更快,这是由它们在内存中的存储方式决定的。
* 需要使用QLinkedList的地方:
* 需要使用QVector的地方:元素的储存位置彼此相邻。
QList表示为一组指向被存储元素的数组。(例外,如果T本身就是指针类型,或者是size不大于指针类型的基本类型,或者是Qt的共享类,那么QList会直接在指针数组中存储这些元素。)元素个数小于1000的QList能够很快地实现在链表中间插入操作,以及快速的查找操作。此外,由于QList在链表两端都预先分配了内存,因此实现prepend()和append()操作都很快。
注意:对于size比指针大的共享类,使用QVector会更好。
QList与C++中数组的索引方式一样,都是从0开始的。我们可以使用[]操作符来访问位于索引值处的元素。对于非const链表,操作符[]返回的是该元素的引用,并且返回值可以用途左操作数。
if ( list[0] == "Bob" )
随后,我们使用insert函数,在列表的第1个位置处插入了字符串"orange",之后又使用removeAt函数,移除了第2个元素。通过使用Q
List
,我们不仅可以快速地实现元素的插入、删除和查找等功能,还可以避免手动管理内存等问题,从而提高开发效率。需要注意的是,由于Q
List
是基于数组实现的,因此在插入、删除元素时,可能会导致数组重新分配内存空间,从而影响性能。因此,在实际使用中,我们应该尽量减少这类操作。Qt中,我们常用的容器之一便是Q
List
,它是一个基于数组实现的动态数组容器。
Q
List
是一个非常快的经典队列:项目被附加push() ,而最旧的等待项目则被shift()检索。 项目可以与前面加上unshift ; 最后一项可以通过pop检索。 Q
List
被实现为可调整大小的循环缓冲区,映射到Array中。
考虑了remove()方法,但是它给快速通道带来的好处很少,从而大大降低了它的速度。 请参阅下面的讨论。
var
List
= require('q
list
');
var q = new
List
();
q.append(1);
q.append(2);
q.shift(); // => 1
随附的基准脚本可测量推送,移位和推送/移位对的速度(此数据结构的预期用例)。 (与3.5GHz AMD Phenom II B55上的node-v5.10.1配合使用)
node benchma
1 如下错误代码,当sl的大小为1,而使用sl.at(i) (i>1)时,程序会出现奔溃。
QString
List
sl; sl<<"11"; qDebug()<<sl.count()<<sl.at(2);结果程序奔溃2 而使用如下代码不会出现奔溃,比较安全,在写代码或者项目的时候要注意尽量用value代替at更安全。 ...
现在就可以使用foreach(int i,
list
)这样就可以遍历整个容器了
Q
List
int>
list
;
list
2416; foreach(int str,
list
) qDe
1、Q
List
介绍
介绍个锤子,有点累,摊牌了,这篇是水的,但是我觉得质量很高,因为我自己写不了这么详细,对,感谢某不知名网站编程指南,我直接白嫖,这篇实在是太多了,说句实话日常使用不久存个指针,然后遍历查找之类的,怎么能写这么多!
在开始讲解 Q
List
之前,我们先明确一下 Qt 数据容器能存储什么,不能存储什么。
Qt 提供的数据容器都是模板类,构造时要带数据类型,比如下面这句定义整型数列表:
Q
List
<int> integer
List
;
Qt 数据容器有支持的数据类型,也有不支持的类型
Q
List
是一种表示链表的模板类。
Q
List
是Qt的一种泛型容器类。它以链表方式存储一组值,并能对这组数据进行快速索引,还提供了快速插入和删除等操作。
Q
List
、QLinked
List
和QVector提供的操作极其相似:
*对大多数操作来说,我们用Q
List
就可以了。其API是基于索引(index)的,因此用起来比QLinked
List
更方便(QLinked
List
的API是基于迭代器的
Q
List
<T> 是 Qt 的通用容器类之一。它将其项目存储在相邻的内存位置并提供基于索引的快速访问。QVector<T> 在 Qt 5 中曾经是一个不同的类,但在Qt6它是 Q
List
的一个别名。
Q
List
<T> 和 QVarLengthArray<T> 提供类似的 API 和功能。它们通常可以互换。
Q
List
应该是默认首选。
QVarLengthArray 提供了一个在堆栈上保留空间的数组,但如果需要,可以动态地增长到堆上。用于通
Q
List
两种存储方式:
1)元素占用空间<指针占用空间(sizeof(T)<sizeof(void*)),并且元素已经使用Q_DECLARE_TYPEINFO声明为 Q_MOVABLE_TYPE 或 Q_PRIMITIVE_TYPE 时,Q
List
以数组形式存储,QVector、QVarLengthArray一样;
2)元素占用空间>指针占用空间时,Q
List
会将每个元素new到堆上,即 Q
List
<T> 表示为 Q
List
<T*>