QT—QList与QLinkedList类的常用方法

2023-10-28

QList<T>维护了一个指针数组,数组元素指向每一个链表项,因此QList<T> 提供了基于下标的快速访问。QLinkedList<T>是一个链式列表,不能使用下标访问,与QList相比,当对一个很大的列表进行插入操作时,QLinkedList更高效。

QList<T>

1.链表插入元素

list<<1<<2<<3;
list.append(4);//链表头部添加
list.prepend(0);//链表头部添加
list.insert(5,10);
qDebug()<<list;

2.索引元素

使用下标或者at( )方法索引元素

QList<int>list;
list<<1<<2<<3<<4<<5<<100;
qDebug()<<"链表第三个元素:"<<list.at(2);
qDebug()<<"链表第二个元素:"<<list[1];

3.判断链表是否包含某个元素

QList<int>list;
list<<1<<2<<3<<4<<5<<100;
qDebug()<<"链表是否包含8:"<<list.contains(8);
qDebug()<<"链表是否包含5:"<<list.contains(5);

4.修改链表中的元素

可以使用replace( )方法修改,也可也使用下标赋值修改

QList<int>list;
list<<1<<2<<3<<4<<5<<100;
list.replace(3,66); //第一个参数表示要修改的位置,第二个参数表示要修改的值
list[1]=100;    //直接通过下标赋值
qDebug()<<list;

5.删除元素 

removeFirst( );//删除第一个元素

removeLast( );//删除最后一个元素

removeAt( int );//删除指定位置元素

removeOne( ) ;//删除指定 的元素

QList<int>list;
list<<1<<2<<3<<4<<5<<100;
qDebug()<<"删除前:"<<list;
list.removeFirst();//删除第一个元素
list.removeLast();//删除最后一个元素
list.removeAt(3);//删除指定位置的元素
list.removeOne(5);//删除指定的元素
qDebug()<<"删除后:"<<list;

6.链表清空

使用clear( )方法可以清空链表 

QList<int>list;
list<<1<<2<<3<<4<<5<<100;
qDebug()<<"链表:"<<list;
list.clear();
qDebug()<<"清空链表:"<<list;

7.链表遍历

1)Java风格的读写迭代器遍历

使用QMutableListIterator<T>读写迭代器遍历。迭代器初始化时只需将要遍历的链表按构造函数传入即可。调用迭代器的insert( )方法可以向链表中插入元素,每插入一个元素,迭代器索引的位置也跟着指向下一个位置。

toBack( )方法可使迭代器指向链表最后一个元素的下一个位置,

toFrount( )方法可使迭代器指向第一个元素的前一个位置,

hasPrevious( )方法可判断前一个位置是否有元素,

hasNext( )方法可判断下一个位置是否有元素,

previous( )方法可以返回前一个位置的元素,并使迭代器指向的位置向前移动

next( )方法可以返回下一个位置的元素,并使迭代器指向的位置向下移动

QList<int> monList;
//读写迭代器
QMutableListIterator<int> it_mrw(monList);
for(int i=1;i<=12;++i){
    it_mrw.insert(i);   //迭代器插入元素,并且迭代器索引的位置也跟着变化
}
//反向遍历
qDebug()<<"反向遍历:";
for(it_mrw.toBack();it_mrw.hasPrevious();){
    qDebug()<<it_mrw.previous();//迭代器向前索引,并返回值
}
qDebug()<<"正向遍历:";
//正向遍历
for(it_mrw.toFront();it_mrw.hasNext();){
    qDebug()<<it_mrw.next();
}

通过迭代器修改链表元素

使用remove( )方法可以移除迭代器当前指向位置的元素,使用setValue(T)可以修改迭代器当前指向位置的元素。

QList<int> monList;
//读写迭代器
QMutableListIterator<int> it_mrw(monList);
for(int i=1;i<=12;++i){
    it_mrw.insert(i);   //迭代器插入元素,并且迭代器索引的位置也跟着变化
}
qDebug()<<"链表值为:"<<monList;
for(it_mrw.toFront();it_mrw.hasNext();){
    //如果是0就删除
    int month = it_mrw.next();
    if(month==1){
        it_mrw.remove();
    }
    //如果是11,就将该位置元素变成12
    if(month==11){
        it_mrw.setValue(12);
    }
}
qDebug()<<"修改后的值为:"<<monList;

只读迭代器

QListIterator<T>迭代器是一种只读迭代器,这种迭代器只能访问链表元素,而不可以修改。

QList<int> monList;
//读写迭代器
QMutableListIterator<int> it_mrw(monList);
for(int i=1;i<=12;++i){
    it_mrw.insert(i);   //迭代器插入元素,并且迭代器索引的位置也跟着变化
}
//只读迭代器
QListIterator<int> it_mr(monList);
//正向遍历
for(it_mr.toFront();it_mr.hasNext();){
    qDebug()<<it_mr.next();
}
//反向遍历
for(it_mr.toBack();it_mr.hasPrevious();){
    qDebug()<<it_mr.previous();
}

2)STL迭代器

QList<T>::iterator是 一种可读写的迭代器,使用时只需按照C++的操作方式即可。

QList<int> numList;
numList<<1<<2<<3<<4<<5;
QList<int>::iterator it_numRw;
it_numRw=numList.begin();
for(;it_numRw!=numList.end();++it_numRw){
    qDebug()<<*it_numRw;
}

使用只读迭代器QList<int>::const_iterator遍历遍历链表。注意在初始化和判断终止条件时,要使用constBegin( )constEnd( )初始和判断

QList<int> numList;
numList<<1<<2<<3<<4<<5;
QList<int>::const_iterator it_numR;
it_numR=numList.constBegin();
for(;it_numR!=numList.constEnd();++it_numR){
    qDebug()<<*it_numR;
}

QLinkedList<T>

 QLinkedList的操作与QList操作大致相同,这里就不多介绍,只列一些初始化和遍历的操作

QLinkedListIterator<QString> it_wr(weekList);
qDebug()<<"正向遍历:";
for(it_wr.toFront();it_wr.hasNext();){
    qDebug()<<it_wr.next();
}

QMutableLinkedListIterator<QString>it_wrw(weekList);
for(it_wrw.toFront();it_wrw.hasNext();){
    QString day=it_wrw.next();
    if(day == "星期3"){
        it_wrw.setValue("星期三");
    }
    if(day =="星期5"){
        it_wrw.remove();
    }
    if(day=="星期4"){
        it_wrw.insert("星期四");
    }
}
qDebug()<<"修改后正向遍历:";
for(it_wrw.toFront();it_wrw.hasNext();){
    qDebug()<<it_wrw.next();
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

QT—QList与QLinkedList类的常用方法 的相关文章

随机推荐

  • C语言可以开发哪些项目?

    C语言是我们大多数人的编程入门语言 对其也再熟悉不过了 不过很多初学者在学习的过程中难免会出现迷茫 比如 不知道C语言可以开发哪些项目 可以应用在哪些实际的开发中 这些迷茫也导致了我们在学习的过程中不知道如何学 学什么 所以 总结这个列表
  • treeSelect节点搜索

    antd中treeSelect的filterTreeNode用法 节点搜索 以下图为例 树形搜索展开后 有以下几个选项 如果我想要搜索其中 产品中心 那直接搜索关键词 产品 即可 我搜索后并未显示我想要的结果 而是为空 这就需要用到 fil
  • 总结JS 常用函数

    希望本文总结的内容能给各位看官带来焕然一新的感觉 另外 如果你们有什么值得推荐的js技巧 欢迎在评论中补充 我可以收纳在本文中 PS 此文档会持续新增内容 Ajax请求 jquery ajax函数 我自己封装了一个ajax的函数 代码如下
  • sudo 之后 unable to resolve host的问题解决办法

    gedit etc hosts 127 0 0 1 localhost 127 0 0 1 Masterback或者其他 把后面的Masterback 或者其他改成新的主机名 应该是最近修改过主机名 也就是用户名 后面的部分
  • _WIN32和_WIN64区别

    WIN32 是一个预定义的宏 用于判断当前编译环境是否为 Windows 操作系统 当使用 MSVC 编译器编译 Windows 应用程序时 无论是 32 位还是 64 位的 Windows 环境 WIN32 宏都会被定义 你可以使用条件编
  • 蓝桥杯2021年第十二届国赛真题-和与乘积

    题目描述 给定一个数列 A a1 a2 an 问有多少个区间 L R 满足区间内元素的乘积等于他们的和 即 aL aL 1 aR aL aL 1 aR 输入格式 输入第一行包含一个整数 n 表示数列的长度 第二行包含 n 个整数 依次表示数
  • SetTimer在无窗口和有窗口线程的使用 .

    今天犯了一个粗心的错误 在无窗口线程中 SetTimer中设置计时器ID 而WM TIMER消息响应函数中得到的计时器ID却不是之前设置的计时器ID 111902 cpp Defines the entry point for the co
  • Prepo —— 图标转化器

    Prepo for mac是Mac os平台上的一款非常不错的Mac图像处理软件 Prepo for mac基于Mac和iOS的一款免费且方便的图标转化器 它可以帮助设计师快速的导出各种尺寸的图标 设计师通过Prepo把任何格式的图片文件转
  • img引入的svg图片,悬浮时怎么修改颜色?

    实现效果 鼠标悬浮在这一行 让这行的文字和svg图片颜色发生变化 因为是用 img标签引入页面 使用fill属性是无效的 css核心代码 active hover transform scale 0 98 img filter drop s
  • Transaction silently rolled back because it has been marked as rollback-only Spring事务嵌套问题

    Transaction silently rolled back because it has been marked as rollback only Spring 事务嵌套问题 添加命令 catch中添加 TransactionAspe
  • Springboot升级到2.x后gridFsTemplate.findOne(query)返回类型由GridFSDBFile改为GridFSFile导致的问题

    问题描述 gridFsTemplate findOne query 返回类型由GridFSDBFile改为GridFSFile导致的问题 文件下载时下面的代码不可用 GridFSDBFile gridFSDBFile new GridFSD
  • java.lang.NoClassDefFoundError: javax/servlet/ServletContext(可能报错原因,不可盖全)

    例如一下jar包版本低 提高版本即可 version 5 0 5RELEASE
  • ArcGIS中统计渔网中栅格人口密度

    文章目录 前言 一 人口数据获取 来源一 中科院地理所公开数据集 来源二 WorldPop数据集 二 人口格网统计步骤 1 创建渔网 2 人口数据处理 2 1 栅格转点 2 2 空间插值 处理人口缺失数据 2 3 空间连接 渔网人口统计 总
  • IGBT简介、结构及原理

    所谓IGBT 绝缘栅双极型晶体管 是由 BJT 双极结型晶体三极管 和 MOS 绝缘栅型场效应管 组成的复合全控型 电压驱动式 功率半导体器件 其具有自关断的特征 简单讲 是一个非通即断的开关 IGBT没有放大电压的功能 导通时可以看做导线
  • ubuntu 安装微信(wechat)

    软件介绍 Wine Wine Is Not an Emulator Wine不是一个模拟器 的缩写 是一个能够在多种 POSIX compliant 操作系统 诸如 Linux Mac OSX 及 BSD 等 上运行 Windows 应用的
  • java动态上传图片_Java实现图片文件上传

    Java实现后台图片上传 将上传图片的接口进行分层 便于维护接口 接口部分 interface 将接口分为单图片上传以及多图片上传 public interface FileUploadService 单图片上传 PicUploadResu
  • 服务器装win10性能怎样,Win10 藏着不给人看的卓越性能模式到底对电脑有什么影响?...

    未来Win10的功能与稳定性趋于完善 其流行趋势会越来越大 许多游戏玩家选择也会选择 Win10 其独有的游戏模式与Xbox游戏录制功能也是对游戏的一大支持所在 今天小编就带大家来简单测试一下Win10 的卓越性能模式对游戏以及电脑性能的影
  • DispatcherServlet最全详解

    文章目录 DispatcherServlet最全详解 DispatcherServlet族谱 一 语言总结 1 DispatcherServlet初始化 2 DispatcherServlet调用组建处理请求 二 DispatcherSer
  • 六、SpringSecurity实现动态权限控制

    前面已经实现了登陆 即认证 下面是登陆之后的鉴权 即某些角色只能访问特定的资源 auther Mr Liao date 2019 8 20 20 24 Component public class MySecurityMetadataSou
  • QT—QList与QLinkedList类的常用方法

    QList