官术网_书友最值得收藏!

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ù)。

主站蜘蛛池模板: 定边县| 灵川县| 叙永县| 临桂县| 友谊县| 大冶市| 广水市| 井冈山市| 乐清市| 济南市| 库伦旗| 洪湖市| 财经| 来宾市| 南康市| 江川县| 焉耆| 密云县| 万载县| 邛崃市| 柳州市| 石阡县| 元氏县| 铁岭县| 三台县| 襄城县| 新郑市| 金寨县| 梓潼县| 武乡县| 高唐县| 嘉禾县| 安多县| 垫江县| 阳春市| 泸州市| 新邵县| 德令哈市| 泌阳县| 黄石市| 城固县|