成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

QT核心編程之集合類 (2)

移動開發
Qt有幾個基于值和基于指針的集合類。基于指針的集合類使用指向條目的指針來工作,而基于值的集合類存儲著它們條目的拷貝。基于值的集合類類似于STL容器類,能和STL算法和容器一起使用。

QT核心編程之集合類是本篇要介紹的內容。QT核心編程我們要分幾個部分來介紹,想參考更多內容,請看末尾的編輯推薦進行詳細閱讀,先來看本篇內容。

一個集合類是裝有多個條目的容器,每個條目是某種數據結構,集合類能執行對容器中的條目的插入、刪除及查找等操作。

Qt有幾個基于值和基于指針的集合類。基于指針的集合類使用指向條目的指針來工作,而基于值的集合類存儲著它們條目的拷貝。基于值的集合類類似于STL容器類,能和STL算法和容器一起使用。

基于值的集合類說明如表4所示:

QT核心編程之集合類 

表4 基于值的集合類表

基于指針的集合類說明如表5所示:

QT核心編程之集合類

表5 基于指針的集合類表

QMemArray 是一個例外,它既不是基于指針也不是基于值,而是基于內存的結構。用于在有簡單數據結構的數組中使用QMemArray效率***,QMemArray在拷貝和數組元素比較時使用位邏輯運算符操作。

這些類中有一些具有迭代器,迭代器是遍歷集合類中的條目的類。在Qt模板庫里,基于值的集合和算法集成在一起。下面討論基于指針的容器。

1、基于指針的容器的結構

基于指針的容器有4個內部基類(QGCache, QGDict, QGList和QGVector)操作void類型指針。通過增加/刪除條目指針,一個由這4個類組成的薄模板層實現了實際的集合。

允許Qt的模板類的策略使得在空間上很經濟(實現這些模板類僅增加了對基類的內聯調用),而且還不影響執行效率。

示例:QPtrList使用

下面的例子說明了如何存儲Employee條目到一個鏈表,并將它們以相反的次序打印出來。

  1. #include <qptrlist.h> 
  2. #include <qstring.h> 
  3. #include <stdio.h> 
  4.  class Employee{public:    Employee( const char *name, int salary ) {  
  5.  n=names=salary;  
  6.  }  
  7.     const char *name()   const               {  
  8.  return n;   
  9. }   
  10.    int         salary() const    {   
  11. return s;  
  12.  }  
  13. private:    QString     n;  
  14.     int         s;  
  15. };  
  16.  int main(){  
  17.     QPtrList<Employee> list;        // 指向Employee的指針鏈表  
  18. list.setAutoDelete( TRUE );     //當鏈表條目被移動時,刪除條目  
  19.      list.append( new Employee("Bill", 50000) ); //鏈表追加新的對象  
  20.     list.append( new Employee("Steve",80000) );  
  21.     list.append( new Employee("Ron",  60000) );  
  22.      QPtrListIterator<Employee> it(list); //遍歷Employee鏈表  
  23.     for ( it.toLast(); it.current(); --it) ) { //從尾向頭遍歷  
  24.      Employee *emp = it.current();  
  25.         printf( "%s earns %d\n", emp->name(), emp->salary() );  
  26.     }  
  27.      return 0;  

程序運行結果如下:

  1. Ron earns 60000   
  2. Steve earns 80000   
  3. Bill earns 50000  

2、管理集合條目

所有基于指針的集合繼承了QPtrCollection基類。這個類僅知道集合中的條目個數和刪除策略。

當集合中的條目被移去時,缺省時它們不被刪除。QPtrCollection::setAutoDelete()定義了刪除策略。在上述QPtrList使用示例子,我們激活了自動刪除功能來進行鏈表刪除。

當插入一個條目到一個集合時,僅指針被拷貝,而不是拷貝條目本身。這稱為淺拷貝。當插入一個條目時,拷貝所有條目的數組到集合中也是可能的,這稱為深拷貝。

所有的集合類函數在插入條目時調用虛擬函數QPtrCollection::newItem()。如果你想進行深拷貝,你需要重載它。

當從一個鏈表中移去一個條目時,調用虛擬函數QPtrCollection::deleteItem()。如果自動刪除功能被激活,在所有集合類中的缺省實現函數被調用來刪除條目。

基于指針的集合類,如:QPtrList<type>,定義了指向對象的指針集合。我們在這里只討論QPtrList類,其它的基于指針的集合類和所有集合類迭代器都有同樣的使用方法。

模板實例化方法如下:

  1. QPtrList<Employee> list;  

在這個例子中,條目的類或類型是Employee,它必須在鏈表定義之前被定義。例如:

  1. class Employee {    ...};
  2. QPtrList<Employee> list; 

3、迭代器(Iterators)

QPtrListIterator能在鏈表被修改的同時非常安全的遍歷鏈表。在同一個集合上,多個迭代器能獨立地工作。

QPtrList有一個指向所有迭代器的內部鏈表,這些迭代器當前操作鏈表。當一個鏈表條目被移去時,鏈表更新所有的指向這個條目的迭代器。

QDict和QCache集合沒有遍歷函數。為了遍歷集合,你必須使用QDictIterator或 QCacheIterator。

Qt預定義的集合類有字符串鏈表:QStrList, QStrIList (在qstrlist.h中)和 QStringList (在qstringlist.h中)。在絕大多數情況下你將選擇QStringList,它是一個共享的QString Unicode字符串的值鏈表。QPtrStrList和 QPtrStrIList僅存儲字符指針,而不是字符串本身。

基于指針的集合類和相關的迭代器類說明如表4。

QT核心編程之集合類  QT核心編程之集合類

表4 基于指針的集合類和相關的迭代器類列表

小結:QT核心編程之集合類的內容介紹完了,希望本文對你有所幫助,如果需要更多內容進行參考,請看編輯推薦。

【編輯推薦】

QT核心編程之Qt模板庫(1)

QT核心編程之Qt線程 (3)

QT核心編程之鼠標拖放 (4)

QT核心編程之鍵盤焦點 (5)

QT核心編程之會話管理 (6)

QT核心編程之調試技術 (7)

責任編輯:zhaolei 來源: 互聯網
相關推薦

2011-06-22 10:12:08

Qt 線程

2011-06-22 09:40:32

QT 模板庫 模板

2011-06-22 10:27:32

QT 鍵盤 焦點

2011-06-22 10:39:56

QT 會話管理

2011-06-22 10:20:11

QT 鼠標 拖放

2011-06-22 10:45:21

QT 調試

2011-06-17 14:29:55

Qt

2012-10-29 13:25:54

JavaScriptJSjQuery

2015-04-24 09:48:59

TCPsocketsocket編程

2011-06-16 11:28:48

Qt QApplicati

2017-02-07 18:34:16

Linux編程PING

2022-02-14 15:07:48

進程FileChanne線程

2011-07-21 10:17:53

java

2022-11-01 09:56:52

Python集合工具類

2011-06-14 15:45:02

Qt Object

2011-06-24 15:30:22

QT 皮膚 QSS

2011-06-22 16:08:40

Qt 多線程 事件循環

2011-06-10 12:44:09

2011-06-13 16:51:19

Qt Socket

2013-09-02 15:53:16

Windows
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 亚洲香蕉| 国产午夜精品一区二区三区四区 | 一区二区三区四区在线免费观看 | 美国av片在线观看 | 九九亚洲精品 | 国产aaaaav久久久一区二区 | 黄网站在线播放 | 91精品国产91久久综合桃花 | 精品久久久久久红码专区 | 91社影院在线观看 | 91tv在线观看 | 狠狠干五月天 | 免费看黄色国产 | 国产精品大全 | 国产精品不卡 | 日韩精品一区二区三区在线播放 | h视频在线免费 | 日韩精品无码一区二区三区 | 视频在线一区二区 | 超碰在线影院 | 蜜桃官网 | 国产精品国产三级国产aⅴ浪潮 | 九九av| 四虎影视一区二区 | 欧美亚洲成人网 | 国产一区二区三区免费观看视频 | 成人看片在线观看 | 大乳boobs巨大吃奶挤奶 | 国产精品二区三区 | 精品国产乱码久久久久久蜜臀 | 精品国产一区二区三区久久影院 | 久久高潮 | 爽爽免费视频 | av一区二区在线观看 | 一a一片一级一片啪啪 | 最新中文字幕第一页视频 | 午夜99| 国产在线网址 | 欧美综合在线视频 | 国产精品毛片一区二区在线看 | 九九热在线观看 |