- Qt 5.12實(shí)戰(zhàn)
- 朱晨冰 李建英
- 1613字
- 2021-03-26 21:56:39
3.5 列表類QList
QList類以列表形態(tài)存儲(chǔ)并管理其中的列表元素,并支持基于快速索引的數(shù)據(jù)存取,也可以進(jìn)行快速的數(shù)據(jù)刪除操作。QList類對(duì)象表示為一組指向被存儲(chǔ)元素的數(shù)組。元素個(gè)數(shù)小于1000的QList類對(duì)象能夠?qū)崿F(xiàn)在鏈表中間的快速插入和查找操作。此外,由于QList類在鏈表兩端都預(yù)先分配了內(nèi)存,因此實(shí)現(xiàn)鏈表前后端的添加操作都很快(這兩個(gè)成員函數(shù)為prepend()和append())。
QList是一種表示鏈表的模板類,是Qt的一種泛型容器類。它以鏈表方式存儲(chǔ)一組數(shù)據(jù)(即列表中的元素),并能對(duì)這組數(shù)據(jù)進(jìn)行快速索引,同時(shí)提供了快速插入和刪除等操作。
QList類、QLinkedList類和QVector類提供的操作極其相似。對(duì)大多數(shù)操作來說,我們用QList類就可以了。QList類的成員函數(shù)是基于索引來實(shí)現(xiàn)的,因此用起來比QLinkedList類更方便(QLinkedList類的成員函數(shù)是基于迭代器來實(shí)現(xiàn)的)。QList類比QVector類更快,這是由它們?cè)趦?nèi)存中的存儲(chǔ)方式所決定的。
注意
對(duì)于尺寸比指針大的共享類,使用QVector類會(huì)更好。
QList類提供了一系列添加、移動(dòng)、刪除元素操作的成員函數(shù):insert()、replace()、removeAt()、swap()。此外,它還提供了一些便于操作的成員函數(shù):append()、prepend()、removeFirst()、removeLast()。
1. 初始化
QList類以鏈表形式存儲(chǔ)一組元素,默認(rèn)時(shí)為空鏈表,可以使用<<操作符添加元素:
QList<QString> list; list << "one" << "two" << "three"; // list: ["one", "two", "three"]
2. 訪問元素
QList類與C++中數(shù)組的索引方式一樣,索引值都是從0開始的。我們可以使用[]操作符來訪問位于某個(gè)索引值處的元素。對(duì)于非const鏈表,操作符[]返回的是該元素的引用,并且返回值可以用于左操作數(shù)。比如:
if ( list[0] == "Bob" ) list[0] = "Robert";
QList類是以指針數(shù)組的形式實(shí)現(xiàn)的,因此操作速度很快(時(shí)間復(fù)雜度為常數(shù))。對(duì)于列表中元素的只讀訪問,可以調(diào)用at()函數(shù):

at()的執(zhí)行速度比操作符[]更快,因?yàn)樗恍枰獔?zhí)行深度復(fù)制。
3. 插入操作
成員函數(shù)insert()在索引值指定的位置后插入值。函數(shù)的原型聲明如下:
void QList::insert(int i, const T &value);
其中,參數(shù)i表示索引;value表示插入值。比如:
QList<QString> list; list << "alpha" << "beta" << "delta"; list.insert(2, "gamma"); // list: ["alpha", "beta", "gamma", "delta"]
4. 替換操作
成員函數(shù)replace()替換索引值指定位置處的值。函數(shù)的原型聲明如下:
void QList::replace(int i, const T &value);
其中,參數(shù)i表示索引;value表示替換值。比如:
QList<QString> list; list << "alpha" << "beta" << "delta"; list.replace(2, "aaa"); // list: ["alpha", "beta", "aaa"]
5. 移除操作
成員函數(shù)removeAt()用于移除索引值指定位置處的值,該函數(shù)的原型聲明如下:
void QList::removeAt(int i);
其中,參數(shù)i表示索引。
6. 移動(dòng)操作
成員函數(shù)move()從某個(gè)索引值指定的位置移動(dòng)到另外一個(gè)索引值指定的位置,該函數(shù)的原型聲明如下:
void QList::move(int from, int to);
其中,參數(shù)from表示源位置;to表示目的位置。比如:
QList<QString> list; list << "A" << "B" << "C" << "D" << "E" << "F"; list.move(1, 4); // list: ["A", "C", "D", "E", "B", "F"]
7. 交換操作
成員函數(shù)swap()用于對(duì)兩個(gè)索引值指定位置的元素進(jìn)行交換,該函數(shù)的原型聲明如下:
void swap(int i, int j);
其中,參數(shù)i和j是要交換的兩個(gè)元素所在位置對(duì)應(yīng)的索引值。比如:
QList<QString> list; list << "A" << "B" << "C" << "D" << "E" << "F"; list.swap(1, 4); // list: ["A", "E", "C", "D", "B", "F"]
8. 在列表尾添加元素
成員函數(shù)append()在列表的末尾插入元素,該函數(shù)的原型聲明如下:
void append(const T &value);
其中,參數(shù)T是要在列表尾部插入的元素值。比如:
QList<QString> list; list.append("one"); list.append("two"); list.append("three"); // list: ["one", "two", "three"]
9. 在表頭添加元素
成員函數(shù)prepend()在列表的頭部插入元素值,該函數(shù)的原型聲明如下:
void QList::prepend(const T &value);
其中,參數(shù)T表示要在列表的開頭插入的元素值。比如:
QList<QString> list; list.prepend("one"); list.prepend("two"); list.prepend("three"); // list: ["three", "two", "one"]
10. 移除第一個(gè)元素
成員函數(shù)removeFirst()用于刪除列表中的第一個(gè)元素,該函數(shù)的原型聲明如下:
void removeFirst();
11. 移除最后一個(gè)元素
成員函數(shù)removeLast()用于刪除列表中的最后一個(gè)元素,該函數(shù)的原型聲明如下:
void removeLast();
12. 獲得列表中第一個(gè)匹配元素值對(duì)應(yīng)的索引位置
成員函數(shù)indexOf()用于返回列表中第一個(gè)匹配元素值對(duì)應(yīng)的索引位置,該函數(shù)的原型聲明如下:
int QList::indexOf(const T &value, int from = 0);
其中,參數(shù)value表示需要查詢的元素值;from表示在列表中第幾次匹配的元素值。比如:

13. 判斷列表中是否有相應(yīng)的元素值
成員函數(shù)contains()用于判斷是否有相應(yīng)的元素值,該函數(shù)的原型聲明如下:
bool contains(const T &value);
如果該列表包含指定值的匹配元素,則返回true,否則返回false。
14. 獲取指定值在列表中出現(xiàn)的次數(shù)
成員函數(shù)count()返回列表中與指定值匹配的元素?cái)?shù)量,該函數(shù)的原型聲明如下:
int count(const T &value);
參數(shù)T表示用于匹配的指定值。
15. 獲取列表中元素的數(shù)量
成員函數(shù)count()返回列表中元素的數(shù)量,該函數(shù)的原型聲明如下:
int count();
注意,用于返回列表元素?cái)?shù)量時(shí),調(diào)用count()函數(shù)時(shí)就不用帶參數(shù)。
- Web程序設(shè)計(jì)及應(yīng)用
- Learning Java Functional Programming
- Python編程自學(xué)手冊(cè)
- Mobile Web Performance Optimization
- C#完全自學(xué)教程
- Arduino開發(fā)實(shí)戰(zhàn)指南:LabVIEW卷
- iOS應(yīng)用逆向工程(第2版)
- EPLAN實(shí)戰(zhàn)設(shè)計(jì)
- SharePoint Development with the SharePoint Framework
- HTML5秘籍(第2版)
- Java Fundamentals
- 代碼閱讀
- 算法圖解
- INSTANT Apache Hive Essentials How-to
- C# 7.0本質(zhì)論