日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

QT中的容器遍历

發布時間:2023/12/18 c/c++ 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 QT中的容器遍历 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?

Qt?的容器類提供了兩種風格的遍歷器:Java?風格和?STL?風格。

?

Java?風格的遍歷器

Java?風格的遍歷器是在?Qt4?首先引入的,是?Qt?應用程序首先推薦使用的形式。這種風格比起?STL?風格的遍歷器更方便。方便的代價就是不如后者高效。
Java 風格的遍歷器指向的是兩個元素之間的位置,而不是指向元素本身。因此,它們可能會指向集合第一個元素之前的位置,也可能指向集合的最后一個元素之后的位置,

每一種容器都有兩種?Java?風格的遍歷器:一種提供只讀訪問,一種提供讀寫訪問:

容器

只讀遍歷器

讀寫遍歷器

QList,QQueue

QListIterator

QMutableListIterator

QLinkedList

QLinkedListIterator

QMutableLinkedListIterator

QVector,QStack

QVectorIterator

QMutableVectorIterator

QSet

QSetIterator

QMutableSetIterator

QMap,QMultiMap

QMapIterator

QMutableMapIterator

QHash,QMultiHash

QHashIterator

QMutableHashIterator


QLinkedList、QVector和QSet的遍歷器接口與QList的是一樣的;QHash遍歷器的接口則同QMap是一樣的。

?

我們通過下面的代碼看看如何使用這種遍歷器:

點擊(此處)折疊或打開

  • QList<QString>?list;
  • list?<<?"A"?<<?"B"?<<?"C"?<<?"D";
  • ?
  • QListIterator<QString>?i(list);
  • while?(i.hasNext())?{
  • ????qDebug()?<<?i.next();
  • }

  • 如果需要修改操作,我們可以使用QMutableListIterator。來看下面的代碼:

    點擊(此處)折疊或打開

  • QMutableListIterator<int>?i(list);
  • while?(i.hasNext())?{
  • ????if?(i.next()?==?“B”)?{
  • ????????i.setValue(“b”);?????//i.next()="b";
  • ????}
  • }
  • QMapItrator也是類似的。例如,

    點擊(此處)折疊或打開

  • ? ?QMap<int,?QString>?map;
  • ???map.insert(1,"A");
  • ???map.insert(2,"B");
  • ???map.insert(3,"C");
  • ?
  • ???QMapIterator<int,?QString>?i(map);
  • ???while?(i.hasNext())?{
  • ???????if(i.next().key()?==?2)
  • ???????????qDebug()?<<?i.value();
  • ???}

  • ?

    ?

    STL?風格的遍歷器

    STL?風格的遍歷器從?Qt?2.0?就開始提供。這種遍歷器能夠兼容?Qt?和?STL?的通用算法,并且為速度進行了優化。同?Java?風格遍歷器類似,Qt?也提供了兩種?STL?風格的遍歷器:一種是只讀訪問,一種是讀寫訪問。我們推薦盡可能使用只讀訪問,因為它們要比讀寫訪問的遍歷器快一些。

    容器

    只讀遍歷器

    讀寫遍歷器

    QList,QQueue

    QList::const_iterator

    QList::iterator

    QLinkedList

    QLinkedList::const_iterator

    QLinkedList::iterator

    QVector,QStack

    QVector::const_iterator

    QVector::iterator

    QSet

    QSet::const_iterator

    QSet::iterator

    QMap,QMultiMap

    QMap::const_iterator

    QMap::iterator

    QHash,QMultiHash

    QHash::const_iterator

    QHash::iter

    ?


    不同于?Java?風格遍歷器,STL?風格遍歷器直接指向元素本身。

    下面是有關QList的相關代碼:

    點擊(此處)折疊或打開

  • QList<QString>?list;
  • list?<<?"A"?<<?"B"?<<?"C"?<<?"D";
  • ?
  • QList<QString>::iterator i;
  • for?(i?=?list.begin();?i?!=?list.end();?++i)?{
  •   *i?=?(*i).toLower();?//?使用?*?運算符獲取遍歷器所指的元素
  •    qDebug()<<*i;
  • }

  • QMap和QHash的遍歷器,*?運算符返回集合鍵值對。下面的代碼,我們打印出QMap的所有元素:

    點擊(此處)折疊或打開

  • QMap<int,?int>?map;
  • ?
  • QMap<int,?int>::const_iterator i;
  • for?(i?=?map.constBegin();?i?!=?map.constEnd();?++i)?{
  • ????qDebug()?<<?i.key()?<<?":"?<<?i.value();
  • }
  • ?

    foreach關鍵字

    如果我們僅僅想要遍歷集合所有元素,我們可以使用?Qt?的foreach關鍵字。這個關鍵字是?Qt?特有的,

    例如,我們使用foreach對QLinkedList進行遍歷:

    ?

    點擊(此處)折疊或打開

  • QLinkedList<QString>?list;
  • ...
  • QString str;
  • foreach?(str,?list)?{
  • ????qDebug()?<<?str;
  • }
  • 總結

    以上是生活随笔為你收集整理的QT中的容器遍历的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。