网站大量收购独家精品文档,联系QQ:2885784924

QList类介绍以及QList的内存释放.pdfVIP

  1. 1、本文档共8页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多

QList类介绍以及QList的内存释放

QList是一种表示链表的模板类。

QListT是Qt的一种泛型容器类。它以链表方式存储一组值,并能对这组数据

进行快速索引,

还提供了快速插入和删除等操作。

QList、QLinkedList和QVector提供的操作极其相似:

*对大多数操作来说,我们用QList就可以了。其API是基于索引(index)的,

因此用起来比QLinkedList更方便(QLinkedList的API是基于迭代器的)。

QList比QVector更快,这是由它

们在内存中的存储方式决定的。

*需要使用QLinkedList的地方:

*需要使用QVector的地方:元素的储存位置彼此相邻。

QListT表示为一组指向被存储元素的数组。(例外,如果T本身就是指

针类型,或者是size不

大于指针类型的基本类型,或者是Qt的共享类,那么QListT会直接在指针

数组中存储这些元素

。)元素个数小于1000的QList能够很快地实现在链表中间插入操作,以及快

速的查找操作。此

外,由于QList在链表两端都预先分配了内存,因此实现prepend()和append()

操作都很快。

注意:对于size比指针大的共享类,使用QVector会更好。

以下是两个分别存储int型数据和QDate类型数据的链表:

QListintintList;

QListQDatedateList;

对于字符串链表,Qt提供了QStringList类。它继承自QList,但还提供了一

些其他便于使用字符

串的函数:QStringList::join()、QStringList::find()、

QStringList::split()。

QList以链表形式存储一组元素。默认为空链表,我们可以使用操作符

添加元素:

QListQStringlist;

listonetwothree;//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(inti=0;i!=list.size();++i)

{

if(list.at(i)==Jane)

{coutFoundJaneatposition:iendl;}

}

at()操作比操作符[]更快,因为它不需要深度复制(deepcopy)。

QList的一个常用操作是,从链表中取出一个元素(元素不再在链表之中),

并对该元素进行操作。

QList提供了以下操作来实现此功能:takeAt()、takeFirst()、takeLast()。

以下是一个示例:

QListQWidget*list;

...

while(!list.isEmpty())

deletalist.takeFirst();

由于QList在链表两端都预先分配了缓存以应对链表两端的快速添加操作,这

样就使得在QList的

两端插入或删除元素变得非常地快。

如果需要找出某个值在链表中出现的位置,我们可以使用indexOf()、

lastIndexOf()函数来实现。

前者进行前向查找,而后者则进行反向查找。两者都会在找到匹配元素后返回

该元素的索引值。若

没有找到匹配元素,则返回-1。例如:

inti=indexOf(Jane);

if(i!=-1)

coutFirstoccuranceofJaneisatpositioniendl;

如果仅仅是想判断链表中是否包含某一值,我们可以使用函数contains()。

如果希望知道某一值在

链表中的出现次数,使

文档评论(0)

151****4266 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档