Qt中QList与QLinkedList类的常用方法总结
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内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
关于vs strcpy_s()和strcat_s()用法探究
这篇文章主要介绍了关于vs strcpy_s()strcat_s()用法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下2020-05-05
最新评论