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是一樣的。
?
我們通過下面的代碼看看如何使用這種遍歷器:
點擊(此處)折疊或打開
如果需要修改操作,我們可以使用QMutableListIterator。來看下面的代碼:
點擊(此處)折疊或打開
QMapItrator也是類似的。例如,
點擊(此處)折疊或打開
?
?
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的相關代碼:
點擊(此處)折疊或打開
QMap和QHash的遍歷器,*?運算符返回集合鍵值對。下面的代碼,我們打印出QMap的所有元素:
點擊(此處)折疊或打開
?
foreach關鍵字
如果我們僅僅想要遍歷集合所有元素,我們可以使用?Qt?的foreach關鍵字。這個關鍵字是?Qt?特有的,
例如,我們使用foreach對QLinkedList進行遍歷:
?
點擊(此處)折疊或打開
總結
- 上一篇: VUE - get 、post 请求后
- 下一篇: QT中的模态对话框及非模态对话框