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

詳解 Qt 中各種豐富容器類

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

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

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

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

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

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

那么QVector有什么好處呢?

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

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

我們可以使用append函數(shù)或者<<操作符來在數(shù)組最后端添加元素而不用擔(dā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使用起來輕松愉快,聲明一個(gè)鏈表與數(shù)組類似,可以這樣QLinkedList<QVector<int>>,QVector<QLinkedList<QLinkedList<double>>>,只要?jiǎng)e把自己搞亂……

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

QMap是個(gè)有趣的東西,想在裸露的底層C++實(shí)現(xiàn)它頗為麻煩。數(shù)組建立的是從0開始的連續(xù)數(shù)字與數(shù)據(jù)的對應(yīng)關(guān)系,而QMap的作用就是,讓任意一種數(shù)據(jù)類型對應(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.  }   

 如果我們想用[]操作符訪問某一項(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)值……。可以用take函數(shù)(讓人糾結(jié)的函數(shù)名)來刪除某一項(xiàng)。

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

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

  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)容介紹完了,最后希望本文對你有所幫助。

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

2011-07-04 16:12:00

QT QWidget

2011-06-14 11:48:38

Webkit QT

2011-06-24 09:13:30

QT SDL

2011-07-04 14:29:25

Qt Designer 容器

2009-05-12 10:55:06

SQLFOR XML模式

2011-08-12 14:04:53

iPhone動(dòng)畫

2011-06-28 15:18:45

Qt 單例模式

2011-06-29 17:20:20

Qt 內(nèi)存 QOBJECT

2011-06-24 15:16:33

Qt 插件

2011-06-24 09:22:54

QT .pro文件 qmake

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 數(shù)據(jù)庫

2011-09-01 15:51:53

Qt插件VS 2010

2011-08-29 14:59:26

QtEvent事件

2011-08-30 14:25:06

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

2011-06-20 09:26:38

Linux qtopia QT

2011-06-30 10:09:26

QT Graphics View

2011-06-30 10:36:07

QT Graphics View

2015-11-10 09:34:58

JavaScript方式
點(diǎn)贊
收藏

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

主站蜘蛛池模板: 欧美在线视频一区二区 | av男人的天堂在线 | 亚洲www.| av中文在线 | 欧美簧片 | 亚洲欧洲一区 | 国产在线精品一区二区三区 | 97精品超碰一区二区三区 | 亚洲国产精品99久久久久久久久 | 国产一区二区在线观看视频 | 日韩高清电影 | 国内精品久久精品 | 国产毛片视频 | 成年人免费看的视频 | 黄色片免费 | 久久亚洲一区二区三区四区 | 国产精品美女久久久久aⅴ国产馆 | 黄色在线免费观看视频网站 | 国产专区在线 | 国产亚洲二区 | 一a一片一级一片啪啪 | 天天色综网 | 在线观看的av | 成人免费看片 | 黄色大片在线免费观看 | 免费观看成人av | 国产丝袜人妖cd露出 | 亚洲精品成人网 | 日韩中文字幕一区二区 | 日韩电影a | 日韩精品一区二区三区中文字幕 | 久久久久午夜 | 国产日韩精品久久 | 麻豆av在线免费观看 | 久久精品天堂 | 97视频网站 | 久久国产精品偷 | 亚洲高清视频在线观看 | 成人网av | 国产成人精品一区二区三区网站观看 | 91久久久久久久久久久久久 |