qt為我們提供了一系列基於模板的容器類,來儲存特定型別的項。這些容器類都是隱式共享的;被用作唯讀容器時,是執行緒安全的。
與stl類似,也分為序列式容器和關聯式容器。
序列式容器有:qvector、qlist、qlinklist、qstack、qqueue。對大部分程式來說qlist都是乙個很好的選擇,快速新增操作;如果你想要確保元素占用連續記憶體,可以用qvector;而qstack和qqueue分別提供了lifo和fifo操作。
關聯式容器有:qmap、qmultimap、qhash、qmultihash、qset。這些容器儲存為key-value對,multi表示支援乙個key關聯多個value;hash容器通過hash函式而不是二分法查詢,提供了更快速的查詢操作;
(1)qvector:順序表,最通用。這個容器類會在一塊相鄰的記憶體中儲存乙個給定型別的值的陣列。在乙個qvector的前端或中間插入是非常慢的,因為這會導致大量現存的元素移動以為新的元素騰出位置。
(2)qlist:鍊錶,最通用。這個容器類維護乙個指標陣列,指標指向儲存的給定型別的值。有兩種儲存方式:
ps:q_declare_typeinfo(type, flags):可以使用此巨集指定有關自定義型別的資訊。有了準確的型別資訊,qt的通用容器可以選擇合適的儲存方法和演算法。型別如下:
q_primitive_type指定該型別是乙個pod(純舊資料)型別,沒有建構函式或析構函式,或者是乙個型別,其中每個位模式都是有效的物件,memcpy()建立該物件的有效獨立副本;
q_movable_type指定該型別具有建構函式和/或析構函式,但可以使用memcpy()在記憶體中移動。注意:儘管有名稱,但這與移動建構函式或c++移動語義無關;
q_complex_type(預設值)指定該型別具有建構函式和/或析構函式,並且不能在記憶體中移動它;
ps:當資料量比較小時(小於1000項),qvector和qlist沒區別;當需要開闢連續空間,或元素遠比指標佔記憶體大時,用qvector;當追加元素時,qvector大概快百分之5;當經常查詢、按索引獲取元素時,qlist比較快;
(3)qlinkedlist:類似qlist,迭代器訪問而不是下標。中間插入時比qlist更快。有更好的迭代語義,即指向qlinkedlist中某個元素的迭代器,只要該元素存在就會一直保持有效,而指向qlist中某元素的迭代器,在向qlist進行任意插入或刪除時都會導致失效。
(4)qstack:繼承自qvector,提供了「先入後出」的語義。
(5)qqueue:繼承自qlist,提供了「先入先出」的語義。
(6)qset:提供了不允許有重複值的集合,提供快速的查詢效率。與stl中set是有本質區別的,qset基於雜湊表,set基於紅黑樹變種。
(7)qmap:字典型容器。會將key型別的值對映到t型別的value上,乙個key對應乙個value,且按key順序儲存。
(8)qmultimap:繼承自qmap,多值字典。乙個key可以關聯多個value。
(9)qhash:字典型容器。與qmap幾乎一模一樣,但查詢更快速,且按任意順序儲存。如果對元素儲存順序無要求,用qhash。
(10)qmultihash:繼承自qhash,多值字典。乙個key可以關聯多個value。
ps:這些容器中儲存的值可以是任何能被賦值的資料型別,即該型別必須提供乙個預設的建構函式、乙個拷貝建構函式、乙個賦值運算子。這樣的資料型別涵蓋了大部分你可以儲存的型別,包括基本型別int和double,指標型別,qt的資料型別qstring,qdate,qtime,但不包括qobject或其子類(qwidget,qdialog,qtimer等等)。如果你嘗試構建乙個qlist型別的變數,編譯器就會提示你qwidget類的拷貝建構函式和賦值操作符是被禁用的。如果你想儲存這些類的物件,可以儲存它們的指標型別,例如qlist。
qt中的常用容器類(解釋比較全面,有插圖) - findumars - (cnblogs.com)
Qt容器類介紹
qt提供了一些順序容器 qlist,qlinkedlist,qvector,qstack和qqueue。因為這些容器中的資料都是乙個接乙個線性儲存的,所以稱為順序容器。對於大多數應用程式而言,使用最多而且最好的時qlist,儘管它是乙個陣列列表,但是可以快速在其頭部和尾部進行新增操作。如果需要使用乙...
Qt學習筆記常用容器
主要說qt的以下幾種容器 1.qlist 2.qlinkedlist 3.map 和一些常用的容器方法的使用 qsort qcopy qfind 1.qlist泛型集合是最常用的一種容器 看一下它的常用 操作 新增刪除和兩個迭代器 qlistiterator和qmutablelistiterator...
Qt的容器類之容器,迭代器
qt中的容器被分為兩個大類 容器元素是乙個值的,比如qvector,以及容器元 素是乙個 key,value 對的,比如qmap。1 第一大類中,qvector將其所有元素存放在一塊連續的記憶體中。隨機訪問的速度很快,但是插入 刪除操作很慢。qstack是qvector的子類,實現棧的功能。除了具有...