QList類是Qt提供的鏈表模板類,在日常工作和學習中經常會用到,雖然QList操作十分便利,但是在用遍歷方式刪除全部元素時很可能會因為疏忽造成沒有將元素全部刪除,從而給程序留下隱患。下面小結一下采用遍歷方式刪除QList中全部元素的方法,避免重走彎路。
下面將比較for循環和foreach循環兩種方式下的不同,並給出正確的刪除方式。
在比較之前,首先構建一個QList對象,其中包含若干QString類型的元素:
1 QList<QString> qlist; 2 qlist<<"a"<<"b"<<"c"<<"d"; 3 qDebug()<<"qlist.size()="<<qlist.size();
此時程序可以得到如下結果:
qlist.size()= 4
for循環刪除方式
很多人可能會出於習慣選擇這個方式來刪除元素,例如:
1 for(int i=0;i<qlist.size();++i) 2 { 3 qlist.removeAt(i); 4 qDebug()<<"qlist.size()="<<qlist.size(); 5 }
這時程序的顯示結果為:
qlist.size()= 3 qlist.size()= 2
打印qlist中的全部元素:
foreach(auto item,qlist) { qDebug()<<item; }
得到:
“b”
“d”
由此可以看出,該方式不能刪除QList對象中的全部元素,原因是在每次循環過程中,使用removeAt成員函數刪除一個指定元素之后,QList對象的元素個數也隨之減1,即size成員函數的返回值在每次循環過程中都會發生變化,因此導致無法成功刪除全部元素。
foreach循環刪除方式
采用foreach方式刪除全部元素:
1 foreach(auto item,qlist) 2 { 3 qlist.removeOne(item); 4 qDebug()<<"qlist.size()="<<qlist.size(); 5 }
采用這種方式可以得到如下結果:
qlist.size()= 3 qlist.size()= 2 qlist.size()= 1 qlist.size()= 0
由此可見,該方式可以成功遍歷刪除QList對象中的全部元素,因此,在QList類的實際使用過程中,推薦使用foreach循環的方式刪除鏈表中的全部元素。