QT中的集合
QT核心編程之集合類是本篇要介紹的內(nèi)容。QT核心編程我們要分幾個部分來介紹,想?yún)⒖几鄡?nèi)容,請看末尾的編輯推薦進(jìn)行詳細(xì)閱讀,先來看本篇內(nèi)容。
一個集合類是裝有多個條目的容器,每個條目是某種數(shù)據(jù)結(jié)構(gòu),集合類能執(zhí)行對容器中的條目的插入、刪除及查找等操作。
Qt有幾個基于值和基于指針的集合類。基于指針的集合類使用指向條目的指針來工作,而基于值的集合類存儲著它們條目的拷貝。基于值的集合類類似于STL容器類,能和STL算法和容器一起使用。
基于值的集合類說明如表4所示:
表4 基于值的集合類表
基于指針的集合類說明如表5所示:
表5 基于指針的集合類表
QMemArray 是一個例外,它既不是基于指針也不是基于值,而是基于內(nèi)存的結(jié)構(gòu)。用于在有簡單數(shù)據(jù)結(jié)構(gòu)的數(shù)組中使用QMemArray效率最高,QMemArray在拷貝和數(shù)組元素比較時使用位邏輯運(yùn)算符操作。
這些類中有一些具有迭代器,迭代器是遍歷集合類中的條目的類。在Qt模板庫里,基于值的集合和算法集成在一起。下面討論基于指針的容器。
1、基于指針的容器的結(jié)構(gòu)
基于指針的容器有4個內(nèi)部基類(QGCache, QGDict, QGList和QGVector)操作void類型指針。通過增加/刪除條目指針,一個由這4個類組成的薄模板層實(shí)現(xiàn)了實(shí)際的集合。
允許Qt的模板類的策略使得在空間上很經(jīng)濟(jì)(實(shí)現(xiàn)這些模板類僅增加了對基類的內(nèi)聯(lián)調(diào)用),而且還不影響執(zhí)行效率。
示例:QPtrList使用
下面的例子說明了如何存儲Employee條目到一個鏈表,并將它們以相反的次序打印出來。
程序運(yùn)行結(jié)果如下:
2、管理集合條目
所有基于指針的集合繼承了QPtrCollection基類。這個類僅知道集合中的條目個數(shù)和刪除策略。
當(dāng)集合中的條目被移去時,缺省時它們不被刪除。QPtrCollection::setAutoDelete()定義了刪除策略。在上述QPtrList使用示例子,我們激活了自動刪除功能來進(jìn)行鏈表刪除。
當(dāng)插入一個條目到一個集合時,僅指針被拷貝,而不是拷貝條目本身。這稱為淺拷貝。當(dāng)插入一個條目時,拷貝所有條目的數(shù)組到集合中也是可能的,這稱為深拷貝。
所有的集合類函數(shù)在插入條目時調(diào)用虛擬函數(shù)QPtrCollection::newItem()。如果你想進(jìn)行深拷貝,你需要重載它。
當(dāng)從一個鏈表中移去一個條目時,調(diào)用虛擬函數(shù)QPtrCollection::deleteItem()。如果自動刪除功能被激活,在所有集合類中的缺省實(shí)現(xiàn)函數(shù)被調(diào)用來刪除條目。
基于指針的集合類,如:QPtrList<type>,定義了指向?qū)ο蟮闹羔樇稀N覀冊谶@里只討論QPtrList類,其它的基于指針的集合類和所有集合類迭代器都有同樣的使用方法。
模板實(shí)例化方法如下:
在這個例子中,條目的類或類型是Employee,它必須在鏈表定義之前被定義。例如:
3、迭代器(Iterators)
QPtrListIterator能在鏈表被修改的同時非常安全的遍歷鏈表。在同一個集合上,多個迭代器能獨(dú)立地工作。
QPtrList有一個指向所有迭代器的內(nèi)部鏈表,這些迭代器當(dāng)前操作鏈表。當(dāng)一個鏈表?xiàng)l目被移去時,鏈表更新所有的指向這個條目的迭代器。
QDict和QCache集合沒有遍歷函數(shù)。為了遍歷集合,你必須使用QDictIterator或 QCacheIterator。
Qt預(yù)定義的集合類有字符串鏈表:QStrList, QStrIList (在qstrlist.h中)和 QStringList (在qstringlist.h中)。在絕大多數(shù)情況下你將選擇QStringList,它是一個共享的QString Unicode字符串的值鏈表。QPtrStrList和 QPtrStrIList僅存儲字符指針,而不是字符串本身。
基于指針的集合類和相關(guān)的迭代器類說明如表4。
?
出處:http://www.cnblogs.com/newstart//
QList以列表形態(tài)存儲并管理值,并能進(jìn)行基于快速索引的訪問,也可以進(jìn)行快速的數(shù)據(jù)刪除操作。
QList使用運(yùn)算符將項(xiàng)目添加到列表
QList<QString> list; list<<"one"<<"two"<<“three”; //list:["one","two","three"]QList通過比較運(yùn)算符來獲得返回值
if(list[0]=="Bob")list[0]="Robert";QList實(shí)現(xiàn)指針數(shù)組后,通過快速運(yùn)算獲取存儲到QList的值。
并且使用函數(shù)at()可以很容易的獲得存儲到列表的位置。
總結(jié)
- 上一篇: Qt下Sqlite数据库操作
- 下一篇: CSS 中 的 margin、borde