五、QList与QLinkedList

本文详细介绍了Qt中的QList和QLinkedList类,包括它们的数据存储策略、元素查询、修改和删除方法,以及QLinkedList的链式结构和迭代器使用。重点强调了QLinkedList在大列表插入时的优势。
摘要由CSDN通过智能技术生成

五、QList与QLinkedList

5.1 QList类

对于不同的数据类型,QList<T>采取不同的存储策略,存储策略如下:

1. 如果T是一个指针类型或指针大小的基本类型(改基本类型占有的字节数和指针类型占有的字节数相同),QList<T>将数值直接存储在它的数组当中。

2. 如果QList<T>存储对象的指针,则该指针指向实际存储的对象。

由于QList很多功能和前面的类的功能相似,所以我们就不再一一赘述了。

很多相似功能

5.1.1 查询元素

    QList<int> l;
    for(int i=0;i<10;i++)
        l.insert(l.end(),i);
    qDebug()<<l;
    qDebug()<<l.at(2);

    //输出结果
    (0, 1, 2, 3, 4, 5, 6, 7, 8, 9)
    2

之所以在end()后面插入元素,是因为用到的赋值操作是insert()函数,所以我们在赋值的时候应该在每次列表的结尾赋值。

5.1.2 修改元素

    l.replace(1,111);
    qDebug()<<l;

    //输出结果
    (0, 111, 2, 3, 4, 5, 6, 7, 8, 9)

由于QList存储元素下标是从0开始的,所以replace(1,111)实际是修改的第二个元素的值。

5.1.3 删除元素

    l.removeAt(0);
    l.removeFirst();
    qDebug()<<l;

    //输出结果
    (2, 3, 4, 5, 6, 7, 8, 9)

5.2 QLinkedList类

QLinkedList<T>是一个链式列表,它以非连续的内存块保存数据。QLinkedList<T>不能使用下标,只能使用迭代器访问它的数据项。与QList相比,当对一个很大的列表进行插入操作时,QLinkedList具有更高的效率。

注意:要引入QLinkedList头文件,因为QDebug头文件不包含QLinkedList。

5.2.1 实例化并输出

    QLinkedList<QString> ll;
    for(int i=1;i<=12;i++)
        ll<<QString("%1%2").arg("month").arg(i);
    QLinkedList<QString>::iterator it;
    for(it=ll.begin();it!=ll.end();it++)
        qDebug()<<*it;

    //输出结果
    "month1"
    "month2"
    "month3"
    "month4"
    "month5"
    "month6"
    "month7"
    "month8"
    "month9"
    "month10"
    "month11"
    "month12"

QLinkedList类不能通过索引的方式访问元素,所以不能用qDebug()直接输出,必须用迭代器,而以上所有类,均可用java风格和STL风格的迭代器。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Mo Yan

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值