自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

詳解 Qt 中各種豐富容器類

移動(dòng)開(kāi)發(fā)
Qt作為一款優(yōu)秀的類型庫(kù),當(dāng)然不會(huì)沒(méi)考慮這些。Qt提供了大量的“容器類”,專門用于以某種方式存儲(chǔ)大量?jī)?nèi)容,QString其實(shí)只是這大量的容器類的一種。

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

Qt作為一款優(yōu)秀的類型庫(kù),當(dāng)然不會(huì)沒(méi)考慮這些。Qt提供了大量的“容器類”,專門用于以某種方式存儲(chǔ)大量?jī)?nèi)容,QString其實(shí)只是這大量的容器類的一種。

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

QVector,是Qt對(duì)所有數(shù)組的封裝,比如我們想要一個(gè)int類型數(shù)組,我們?cè)葧?huì)寫int array[10],我們?cè)赒t里可以寫QVector<int> array(10)

賦值的時(shí)候,我們依然可以照舊array[5]=4;想獲取某一項(xiàng)的值也還可以array[9],也就是說(shuō),原來(lái)的特性我們還可以用。

那么QVector有什么好處呢?

我們可以用count函數(shù)獲知數(shù)組中有多少個(gè)元素,方便遍歷

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

我們可以使用append函數(shù)或者<<操作符來(lái)在數(shù)組最后端添加元素而不用擔(dān)心溢出問(wèn)題。

比如:

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

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

QLinkedList。鏈表是大部分人極為頭痛的內(nèi)容,各種節(jié)點(diǎn)、內(nèi)存地址之類的搞得人不勝其亂。但是QLinkedList使用起來(lái)輕松愉快,聲明一個(gè)鏈表與數(shù)組類似,可以這樣QLinkedList<QVector<int>>,QVector<QLinkedList<QLinkedList<double>>>,只要?jiǎng)e把自己搞亂……

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

QMap是個(gè)有趣的東西,想在裸露的底層C++實(shí)現(xiàn)它頗為麻煩。數(shù)組建立的是從0開(kāi)始的連續(xù)數(shù)字與數(shù)據(jù)的對(duì)應(yīng)關(guān)系,而QMap的作用就是,讓任意一種數(shù)據(jù)類型對(duì)應(yīng)于另一種數(shù)據(jù)類型。聲明時(shí)如此:QMap<索引類型,數(shù)據(jù)類型> 變量名。他的表現(xiàn)有點(diǎn)類似于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.  }   

 如果我們想用[]操作符訪問(wèn)某一項(xiàng),但那一項(xiàng)并不存在,那就會(huì)自動(dòng)創(chuàng)建,如果不想創(chuàng)建空白項(xiàng)可以使用value函數(shù),如i2d.value(123,-0.1);這里如果i2d[123]存在的話就返回那一項(xiàng),否則返回默認(rèn)值-0.1,這個(gè)默認(rèn)值可以不寫,那樣Qt系統(tǒng)就會(huì)使用Qt默認(rèn)的默認(rèn)值……??梢杂胻ake函數(shù)(讓人糾結(jié)的函數(shù)名)來(lái)刪除某一項(xiàng)。

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

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

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

調(diào)用map[3]時(shí),就會(huì)得到一個(gè)QList<QString>類型的變量。

遍歷時(shí)依然可用 QMapIterator

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

責(zé)任編輯:zhaolei 來(lái)源: 互聯(lián)網(wǎng)
相關(guān)推薦

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

2009-05-12 10:55:06

SQLFOR XML模式

2011-08-12 14:04:53

iPhone動(dòng)畫

2011-06-29 17:20:20

Qt 內(nèi)存 QOBJECT

2011-06-28 15:18:45

Qt 單例模式

2011-06-24 09:22:54

QT .pro文件 qmake

2011-06-24 15:16:33

Qt 庫(kù) 插件

2011-06-30 16:38:07

Qt QTableWidg

2011-09-01 15:51:53

Qt插件VS 2010

2011-06-30 10:22:48

QT Graphics View

2011-08-29 14:59:26

QtEvent事件

2011-07-04 17:45:45

Qt Sqlite 數(shù)據(jù)庫(kù)

2011-06-30 10:09:26

QT Graphics View

2011-08-30 14:25:06

QT數(shù)據(jù)庫(kù)

2011-06-30 10:36:07

QT Graphics View

2011-06-20 09:26:38

Linux qtopia QT

2011-06-16 11:28:48

Qt QApplicati
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)