Qt中QList与QLinkedList类的常用方法总结

 更新时间:2022年12月14日 10:50:57   作者:霸道小明  
这篇文章主要为大家详细介绍了Qt中QList与QLinkedList类的常用方法,文中的示例代码讲解详细,对我们学习Qt有一定的帮助,需要的可以参考一下

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();
}

到此这篇关于Qt中QList与QLinkedList类的常用方法总结的文章就介绍到这了,更多相关Qt QList QLinkedList内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • C++超详细实现堆和堆排序过像

    C++超详细实现堆和堆排序过像

    堆是计算机科学中一类特殊的数据结构的统称,通常是一个可以被看做一棵完全二叉树的数组对象。而堆排序是利用堆这种数据结构所设计的一种排序算法。本文将通过图片详细介绍堆排序,需要的可以参考一下
    2022-06-06
  • C++浮点数类型详情

    C++浮点数类型详情

    这篇文章主要介绍了C++浮点数类型,浮点数是C++的第二组基本类型,它能够表示带小数部分的数字。不仅如此,浮点数的范围也比int更大,可以表示更大范围的数字。下面来我们大家一起来学习学习内容
    2021-11-11
  • C语言使用回溯法解旅行售货员问题与图的m着色问题

    C语言使用回溯法解旅行售货员问题与图的m着色问题

    回溯法即是在按条件搜索走不通的情况下退回再选择其他路线的方法,这里我们来看C语言使用回溯法解旅行售货员问题与图的m着色问题的方法示例:
    2016-07-07
  • C语言创建windows窗口实例

    C语言创建windows窗口实例

    这篇文章主要介绍了C语言创建windows窗口实例,本文直接给出实现代码,同时讲解了编码的步骤,需要的朋友可以参考下
    2015-04-04
  • C++ 操作系统内存分配算法的实现详解

    C++ 操作系统内存分配算法的实现详解

    本文主要介绍了在动态分区管理方式下采用不同的分配算法实现主存分配和实现主存回收,旨在帮助学生理解在动态分区管理方式下应怎样实现主存空间的分配和回收。感兴趣的可以了解一下
    2021-11-11
  • 零基础学习C/C++需要注意的地方

    零基础学习C/C++需要注意的地方

    这篇文章主要介绍了零基础学习C/C++需要注意的地方,文中讲解非常细致,供大家参考和学习,想要学习C/C++的可以阅读此文
    2020-06-06
  • C++类和对象之类的6个默认成员函数详解

    C++类和对象之类的6个默认成员函数详解

    类是对某一事物的抽象描述,具体地讲类是C++中的一种构造的数据类型,下面这篇文章主要给大家介绍了关于C++类和对象之类的6个默认成员函数的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2023-02-02
  • C语言用递归函数对素数进行判断流程

    C语言用递归函数对素数进行判断流程

    素数判断是编程语言学习过程中一个老生常谈的话题,而它的实现也有多种算法,包括经典的试除法(以及试除法的几种优化),进阶的素数表筛选法,埃拉托斯特尼筛法和欧拉筛法(以及它们的优化)等。对以上算法感兴趣的朋友们,不妨搜索“素数判断的N种境界”来学习了解
    2022-09-09
  • c++数组排序的5种方法实例代码

    c++数组排序的5种方法实例代码

    大家还在为大小排序而烦恼吗?今天让我我大家解决这个问题吧,下面这篇文章主要给大家介绍了关于c++数组排序的5种方法,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2023-01-01
  • C++常量指针,指针常量,指向常量的常指针详解

    C++常量指针,指针常量,指向常量的常指针详解

    刚接触到指针时,关于C++常量指针,指针常量,指向常量的常指针容易混淆,所以整理下,希望能够帮助自己也帮助到大家
    2021-10-10

最新评论