Qt中QList與QLinkedList類的常用方法總結(jié)
QList<T>維護了一個指針數(shù)組,數(shù)組元素指向每一個鏈表項,因此QList<T> 提供了基于下標(biāo)的快速訪問。QLinkedList<T>是一個鏈?zhǔn)搅斜?,不能使用下?biāo)訪問,與QList相比,當(dāng)對一個很大的列表進行插入操作時,QLinkedList更高效。
QList<T>
1.鏈表插入元素
list<<1<<2<<3; list.append(4);//鏈表頭部添加 list.prepend(0);//鏈表頭部添加 list.insert(5,10); qDebug()<<list;
2.索引元素
使用下標(biāo)或者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( )方法修改,也可也使用下標(biāo)賦值修改
QList<int>list; list<<1<<2<<3<<4<<5<<100; list.replace(3,66); //第一個參數(shù)表示要修改的位置,第二個參數(shù)表示要修改的值 list[1]=100; //直接通過下標(biāo)賦值 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風(fēng)格的讀寫迭代器遍歷
使用QMutableListIterator<T>讀寫迭代器遍歷。迭代器初始化時只需將要遍歷的鏈表按構(gòu)造函數(shù)傳入即可。調(diào)用迭代器的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( )方法可以移除迭代器當(dāng)前指向位置的元素,使用setValue(T)可以修改迭代器當(dāng)前指向位置的元素。
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(); }
到此這篇關(guān)于Qt中QList與QLinkedList類的常用方法總結(jié)的文章就介紹到這了,更多相關(guān)Qt QList QLinkedList內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C語言sizeof和strlen的指針和數(shù)組面試題詳解
strlen是函數(shù),字符串長度,不包括停止符。而sizeof則是內(nèi)存塊的大小,包括停止符。數(shù)組是一種數(shù)據(jù)類型,數(shù)據(jù)類型的本質(zhì)就是固定大小,內(nèi)存塊的別名??梢杂胹izeof()一般都是數(shù)據(jù)類型2022-04-04利用C++實現(xiàn)通訊錄管理系統(tǒng)的完整代碼
通訊錄是一個可以記錄親人、好友信息的工具,下面這篇文章主要給大家介紹了關(guān)于利用C++實現(xiàn)通訊錄管理系統(tǒng)的相關(guān)資料,文中通過實例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-06-06關(guān)于vs strcpy_s()和strcat_s()用法探究
這篇文章主要介紹了關(guān)于vs strcpy_s()strcat_s()用法,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-05-05