陣列 鍊錶 雜湊 Qt中豐富的容器類

2021-06-23 00:53:34 字數 2429 閱讀 4086

在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我們雖然最好也先定義好大小,但是預先不定義也可以。

比如:?

12

3

4

5

6

7

8

9

10

11

#include

...

voidsomefunction()

...

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

qlinkedlist。鍊錶是大部分人極為頭痛的內容,各種節點、記憶體位址之類的搞得人不勝其亂。但是qlinkedlist使用起來輕鬆愉快,宣告乙個鍊錶與陣列類似,可以這樣qlinkedlist>,qvector>>,只要別把自己搞亂……

陣列在末端插入元素是高效的但是在中間插入卻是較慢的,qlist在任何地方插入都是等速的,但是訪問某個元素時並不方便,所以我個人更推崇另一種「鍊錶」型別qlist,與其說他是鍊錶,其實他是個指標陣列,所有陣列的用法qlist也一樣用,不過他的原理什麼的就不用知道的那麼多了,知道用法跟qvector差不多一樣就行了。有時陣列中的每乙個元素較龐大的話,建議使用qlist而不是qvector。

qmap是個有趣的東西,想在裸露的底層c++實現它頗為麻煩。陣列建立的是從0開始的連續數字與資料的對應關係,而qmap的作用就是,讓任意一種資料型別對應於另一種資料型別。宣告時如此:qmap《索引型別,資料型別》 變數名。他的表現有點類似於php程式設計的array

比如:?

12

3

4

5

6

7

8

9

10

11

12

13

14

#include

...

voidsomefunction()

...

如果我們想用操作符訪問某一項,但那一項並不存在,那就會自動建立,如果不想建立空白項可以使用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...