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

詳解 Qt 中各種豐富容器類

移動開發
Qt作為一款優秀的類型庫,當然不會沒考慮這些。Qt提供了大量的“容器類”,專門用于以某種方式存儲大量內容,QString其實只是這大量的容器類的一種。

數組、鏈表、哈希……各種容器類,在C++里做大型程序時,少不了要與數組、鏈表等數據結構打交道。就是最簡單的字符串也常常讓頭痛萬分,Qt中有QString解決了字符串的頭痛,那么其他數組等有沒有更簡單的解決方案呢?

Qt作為一款優秀的類型庫,當然不會沒考慮這些。Qt提供了大量的“容器類”,專門用于以某種方式存儲大量內容,QString其實只是這大量的容器類的一種。

QVector(數組)、QLinkedList(鏈表)、QMap(映射表)、QHash(哈希表)

QVector,是Qt對所有數組的封裝,比如我們想要一個int類型數組,我們原先會寫int array[10],我們在Qt里可以寫QVector<int> array(10)

賦值的時候,我們依然可以照舊array[5]=4;想獲取某一項的值也還可以array[9],也就是說,原來的特性我們還可以用。

那么QVector有什么好處呢?

我們可以用count函數獲知數組中有多少個元素,方便遍歷

原先我們必須預定義好大小,而用QVector我們雖然最好也先定義好大小,但是預先不定義也可以。

我們可以使用append函數或者<<操作符來在數組最后端添加元素而不用擔心溢出問題。

比如:

  1. view sourceprint?01 #include<QVector>    
  2.  ...    
  3.  void someFunction()    
  4.  {    
  5.      QVector<QString> strArray;    
  6.      strArray.append("Hello");    
  7.      strArray<<"World!";    
  8.      strArray<<"也可以一行"<<"加多個元素"<<"這里一次加了3個";    
  9.     //現在strArray總共有5個字符串元素,strArray.count()==5    
  10.  }    
  11.  ...  

當我們想要在某一項前面插入元素時,我們可以使用insert,比如strArray.insert(1,"我在Hello與World之間");

QLinkedList。鏈表是大部分人極為頭痛的內容,各種節點、內存地址之類的搞得人不勝其亂。但是QLinkedList使用起來輕松愉快,聲明一個鏈表與數組類似,可以這樣QLinkedList<QVector<int>>,QVector<QLinkedList<QLinkedList<double>>>,只要別把自己搞亂……

數組在末端插入元素是高效的但是在中間插入卻是較慢的,QList在任何地方插入都是等速的,但是訪問某個元素時并不方便,所以我個人更推崇另一種“鏈表”類型QList,與其說他是鏈表,其實他是個指針數組,所有數組的用法QList也一樣用,不過他的原理什么的就不用知道的那么多了,知道用法跟QVector差不多一樣就行了。有時數組中的每一個元素較龐大的話,建議使用QList而不是QVector。

QMap是個有趣的東西,想在裸露的底層C++實現它頗為麻煩。數組建立的是從0開始的連續數字與數據的對應關系,而QMap的作用就是,讓任意一種數據類型對應于另一種數據類型。聲明時如此:QMap<索引類型,數據類型> 變量名。他的表現有點類似于PHP編程的array

比如:

  1. view sourceprint?01 #include<QMap>    
  2.  ...    
  3.  void someFunction()    
  4.  {    
  5.      QMap<QString,QString> map;    
  6.      map["Hello"]="World";    
  7.      QMap<int,double> i2d;    
  8.      i2d[5231]=32.4213;    
  9.      //遍歷比較特殊,得這樣:    
  10.      QMapIterator<QString,QString> i(map);    
  11.      while(i.hasNext())    
  12.         doSomething(i.next());    
  13.  }   

 如果我們想用[]操作符訪問某一項,但那一項并不存在,那就會自動創建,如果不想創建空白項可以使用value函數,如i2d.value(123,-0.1);這里如果i2d[123]存在的話就返回那一項,否則返回默認值-0.1,這個默認值可以不寫,那樣Qt系統就會使用Qt默認的默認值……。可以用take函數(讓人糾結的函數名)來刪除某一項。

QHash哈希表,與QMap幾乎一樣,但是它更高效,不過使用QHash要求作為索引的類型可以用==比較并且有對應的函數qHash,Qt里面自帶了一部分,比如QString、各類整數、指針、QByteArray、QChar等都可以直接作為QHash的索引。因為QHash更高效,所以建議盡量使用QHash。

QMap與QHash都是一對一或多對以的映射,可以使用QMultiMap與QMultiHash建立一對多的映射。比如

  1. QMultiMap <int,QString> map;  
  2. map[3]="Hello";  
  3. map.insert(3,"World"); 

調用map[3]時,就會得到一個QList<QString>類型的變量。

遍歷時依然可用 QMapIterator

小結:文章分別從QVector(數組)、QLinkedList(鏈表)、QMap(映射表)、QHash(哈希表)一一介紹,那么到這里,Qt 中各種豐富容器類 的內容介紹完了,最后希望本文對你有所幫助。

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

2011-07-04 16:12:00

QT QWidget

2011-06-14 11:48:38

Webkit QT

2011-07-04 14:29:25

Qt Designer 容器

2011-06-24 09:13:30

QT SDL

2011-06-29 17:20:20

Qt 內存 QOBJECT

2011-06-28 15:18:45

Qt 單例模式

2009-05-12 10:55:06

SQLFOR XML模式

2011-08-12 14:04:53

iPhone動畫

2011-06-24 09:22:54

QT .pro文件 qmake

2011-06-24 15:16:33

Qt 插件

2011-06-30 16:38:07

Qt QTableWidg

2011-06-30 10:22:48

QT Graphics View

2011-07-04 17:45:45

Qt Sqlite 數據庫

2011-08-29 14:59:26

QtEvent事件

2011-09-01 15:51:53

Qt插件VS 2010

2011-08-30 14:25:06

QT數據庫

2011-06-20 09:26:38

Linux qtopia QT

2011-06-30 10:36:07

QT Graphics View

2011-06-30 10:09:26

QT Graphics View

2011-06-16 11:28:48

Qt QApplicati
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 超碰日本| 欧美一区在线视频 | 日本不卡视频 | 最新中文字幕在线 | 色综合天天综合网国产成人网 | 九九福利| 国产成人一区二区三区 | 亚洲精品一区二区三区 | 97碰碰碰| 第一区在线观看免费国语入口 | 99在线播放 | 国产精品美女久久久久久不卡 | 国产免费让你躁在线视频 | 国产欧美在线观看 | 久久97精品| 免费三级网站 | 国产精品久久久久久亚洲调教 | 久久一二三区 | 国产精品久久久久久久久大全 | 在线视频a | 国产一区二区三区在线 | 国产成人在线视频免费观看 | 日韩中文字幕在线免费 | 国产黄色小视频在线观看 | 亚洲成人999 | 精品久久久久久 | 国产精品一码二码三码在线 | 99视频在线免费观看 | 91精品国产乱码久久久久久 | 欧美色欧美亚洲另类七区 | 日韩视频a| 国产毛片视频 | 亚洲国产电影 | 欧美精品1区2区 | caoporn国产精品免费公开 | 欧美精品久久久久久久久老牛影院 | 日韩不卡视频在线观看 | 紧缚调教一区二区三区视频 | 日韩精品专区在线影院重磅 | 日本 欧美 三级 高清 视频 | 欧美区在线 |