QList
表示为一组指向被存储元素的数组。(例外,如果T本身就是指针类型,或者是size不
大于指针类型的基本类型,或者是Qt的共享类,那么QList
会直接在指针数组中存储这些元素
。)元素个数小于1000的QList能够很快地实现在链表中间插入操作,以及快速的查找操作。此
外,由于QList在链表两端都预先分配了内存,因此实现prepend()和append()操作都很快。
注意:对于size比指针大的共享类,使用QVector会更好。
QList以链表形式存储一组元素。默认为空链表,我们可以使用< <操作符添加元素:
QList
list;
list << "one" << "two" << "three"; // list: ["one", "two", "three"]
QList提供了一系列添加、移动、删除元素的操作:insert(), replace(), removeAt(), swap()
。此外,它还提供了便于操作的函数:append(), prepend(), removeFirst(), removeLast()。
QList与C++中数组的索引方式一样,都是从0开始的。我们可以使用[]操作符来访问位于索引值
处的元素。对于非const链表,操作符[]返回的是该元素的引用,并且返回值可以用途左操作数。
if ( list[0] == “Bob” )
list[0] = “Robert”;
由于QList是以指针数组的形式实现的,该操作能够很快地实现(时间复杂度为常数)。对于只读
访问,我们可以用at()函数实现访问:
for ( int i=0; i!=list.size(); ++i )
{
if ( list.at(i) == “Jane” )
{ cout << "Found Jane at position:" << i<< endl;}
}
at()操作比操作符[]更快,因为它不需要深度复制(deep copy)。
QList的一个常用操作是,从链表中取出一个元素(元素不再在链表之中),并对该元素进行操作。
QList提供了以下操作来实现此功能:takeAt()、takeFirst()、takeLast()。以下是一个示例:
QList
list;
…
while ( !list.isEmpty() )
deleta list.takeFirst();
由于QList在链表两端都预先分配了缓存以应对链表两端的快速添加操作,这样就使得在QList的
两端插入或删除元素变得非常地快。
如果需要找出某个值在链表中出现的位置,我们可以使用indexOf()、lastIndexOf()函数来实现。
前者进行前向查找,而后者则进行反向查找。两者都会在找到匹配元素后返回该元素的索引值。若
没有找到匹配元素,则返回-1。例如:
int i = indexOf(“Jane”);
if ( i!=-1 )
cout << "First occurance of Jane is at position" << i << endl;
操作符添加元素:
发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/226116.html原文链接:https://javaforall.net
