在c++裡做大型程式時,少不了要與陣列、鍊錶等資料結構打交道。就是最簡單的字串也常常讓頭痛萬分,qt中有qstring解決了字串的頭痛,那麼其他陣列等有沒有更簡單的解決方案呢?
qt作為一款優秀的型別庫,當然不會沒考慮這些。qt提供了大量的「容器類」,專門用於以某種方式儲存大量內容,qstring其實只是這大量的容器類的一種。
我在這裡介紹:
qvector(陣列)、qlinkedlist(鍊錶)、qmap(對映表)、qhash(雜湊表)
qvector,是qt對所有陣列的封裝,比如我們想要乙個int型別陣列,我們原先會寫int array[10],我們在qt裡可以寫qvectorarray(10)
賦值的時候,我們依然可以照舊array[5]=4;想獲取某一項的值也還可以array[9],也就是說,原來的特性我們還可以用。
那麼qvector有什麼好處呢?
·我們可以用count函式獲知陣列中有多少個元素,方便遍歷
·原先我們必須預定義好大小,而用qvector我們雖然最好也先定義好大小,但是預先不定義也可以。
比如:
#include...
void somefunction()
...
·當我們想要在某一項前面插入元素時,我們可以使用insert,比如strarray.insert(1,"我在hello與world之間");
qlinkedlist。鍊錶是大部分人極為頭痛的內容,各種節點、記憶體位址之類的搞得人不勝其亂。但是qlinkedlist使用起來輕鬆愉快,宣告乙個鍊錶與陣列類似,可以這樣qlinkedlist>,qvector>>,只要別把自己搞亂……
陣列在末端插入元素是高效的但是在中間插入卻是較慢的,qlist在任何地方插入都是等速的,但是訪問某個元素時並不方便,所以我個人更推崇另一種「鍊錶」型別qlist,與其說他是鍊錶,其實他是個指標陣列,所有陣列的用法qlist也一樣用,不過他的原理什麼的就不用知道的那麼多了,知道用法跟qvector差不多一樣就行了。有時陣列中的每乙個元素較龐大的話,建議使用qlist而不是qvector。
qmap是個有趣的東西,想在裸露的底層c++實現它頗為麻煩。陣列建立的是從0開始的連續數字與資料的對應關係,而qmap的作用就是,讓任意一種資料型別對應於另一種資料型別。宣告時如此:qmap《索引型別,資料型別》 變數名。他的表現有點類似於php程式設計的array
比如:
#include...
void somefunction()
...
如果我們想用操作符訪問某一項,但那一項並不存在,那就會自動建立,如果不想建立空白項可以使用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建立一對多的對映。
比如qmultimap map;
map[3]="hello";
map.insert(3,"world");
呼叫map[3]時,就會得到乙個qlist型別的變數。
遍歷時依然可用 qmapiterator
陣列 鍊錶 雜湊 Qt中豐富的容器類
在c 裡做大型程式時,少不了要與陣列 鍊錶等資料結構打交道。就是最簡單的字串也常常讓頭痛萬分,qt中有qstring解決了字串的頭痛,那麼其他陣列等有沒有更簡單的解決方案呢?qt作為一款優秀的型別庫,當然不會沒考慮這些。qt提供了大量的 容器類 專門用於以某種方式儲存大量內容,qstring其實只是...
陣列 鍊錶 雜湊 Qt中豐富的容器類
陣列 鍊錶 雜湊 qt 中豐富的容器類 在c 裡做大型程式時,少不了要與陣列 鍊錶等資料結構打交道。就是最簡單的字串也常常讓頭痛萬分,qt中有qstring解決了字串的頭痛,那麼其他陣列等有沒有更簡單的解決方案呢?qt作為一款優秀的型別庫,當然不會沒考慮這些。qt提供了大量的 容器類 專門用於以某種...
詳解 Qt 中各種豐富容器類
qt作為一款優秀的型別庫,當然不會沒考慮這些。qt提供了大量的 容器類 專門用於以某種方式儲存大量內容,qstring其實只是這大量的容器類的一種。ad 陣列 鍊錶 雜湊 各種容器類,在c 裡做大型程式時,少不了要與陣列 鍊錶等資料結構打交道。就是最簡單的字串也常常讓頭痛萬分,qt中有qstring...