QList 用法

QList 用法QList 是一种表示链表的模板类 QList lt T gt 是 Qt 的一种泛型容器类 它以链表方式存储一组值 并能对这组数据进行快速索引 还提供了快速插入和删除等操作 QList QLinkedList 和 QVector 提供的操作极其相似 对大多数操作来说 我们用 QList 就可以了 其 API 是基于索引 index 的 因此用起来比 QLinkedList 更方便 QLinkedList 的 AP

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

(0)
上一篇 2026年3月17日 上午7:47
下一篇 2026年3月17日 上午7:48


相关推荐

  • c语言中break和continue的用法和区别

    c语言中break和continue的用法和区别break与continue的的用法以及区别1.当它们用在循环语句的循环体时,break用于立即退出本层循环,而continue仅仅结束本次循环(本次循环体内不执continue语句后的其它语句,但下一次循环还会继续执行。2.如果有多层循环时,break只会跳出本层循环,不会跳出其他层的循环.3.break可用于switch语句,表示跳出整个switch语句块,而contin…

    2025年10月25日
    7
  • 谈谈网站防盗链

    谈谈网站防盗链#开启重写引擎RewriteEngineon#图片防盗链RewriteCond%{HTTP_REFERER}!http://rewrite/.*RewriteRule.*\.(jpg|jpeg|png|gif)daotu.jpg引子:明明引用了一个正确的图片地址,但显示出来的却是一个红叉或写有“此图片仅限于***网站用户交流沟

    2022年7月23日
    12
  • 九种分布式ID生成算法详解

    九种分布式ID生成算法详解一 分布式 ID 简介 1 什么是分布式 ID 在我们业务数据量不大的时候 单库单表完全可以支撑现有业务 数据再大一点搞个 MySQL 主从同步读写分离也能对付 但随着数据日渐增长 主从同步也扛不住了 就需要对数据库进行分库分表 但分库分表后需要有一个唯一 ID 来标识一条数据 数据库的自增 ID 显然不能满足需求 例如我们的订单 需要有一个全局唯一标识的订单号 这个订单号就是分布式 ID2 分布式 ID 需要满足那些条件 全局唯一 必须保证 ID 是全局性唯一的 基本要求 高可用 高性能 高可

    2026年3月18日
    2
  • 面向对象编程(Python版详解)

    面向对象编程(Python版详解)本篇是面向对象编程 Python 版详解 案例教学超详细 欢迎打卡 阅读学习

    2026年3月19日
    2
  • RK键盘说明书

    RK键盘说明书图片说明多媒体快捷键 Win 系统 Mac 系统 Win 系统 Mac 系统 FN F1 我的电脑屏幕亮度 FN F7 播放 暂停上一首 FN F2 浏览器屏幕亮度 FN F8 停止播放 暂停 FN F3 邮件多任务切换 FN F9 音量 下一首 FN F4 播放所有任务 FN F10 音量 静音 FN F5 上一首笔记本亮度 FN F11 静音音量 FN F6 下一首笔记本亮度 FN F12 计算器音量 功能键一览 Fn 1 7

    2026年3月16日
    2
  • Android CompoundButton[通俗易懂]

    Android CompoundButton[通俗易懂]为什么80%的码农都做不了架构师?>>>…

    2022年5月2日
    48

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号