九色国产,午夜在线视频,新黄色网址,九九色综合,天天做夜夜做久久做狠狠,天天躁夜夜躁狠狠躁2021a,久久不卡一区二区三区

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
QList類介紹

QList是一種表示鏈表的模板類。
QList<T>是Qt的一種泛型容器類。它以鏈表方式存儲一組值,并能對這組數(shù)據(jù)進行快速索引,
還提供了快速插入和刪除等操作。
QList、QLinkedList和QVector提供的操作極其相似:
* 對大多數(shù)操作來說,我們用QList就可以了。其API是基于索引(index)的,因此用起來比QLinkedList更方便(QLinkedList的API是基于迭代器的)。QList比QVector更快,這是由它
們在內(nèi)存中的存儲方式?jīng)Q定的。
* 需要使用QLinkedList的地方:
* 需要使用QVector的地方:元素的儲存位置彼此相鄰。

QList<T>表示為一組指向被存儲元素的數(shù)組。(例外,如果T本身就是指針類型,或者是size不
大于指針類型的基本類型,或者是Qt的共享類,那么QList<T>會直接在指針數(shù)組中存儲這些元素
。)元素個數(shù)小于1000的QList能夠很快地實現(xiàn)在鏈表中間插入操作,以及快速的查找操作。此
外,由于QList在鏈表兩端都預先分配了內(nèi)存,因此實現(xiàn)prepend()和append()操作都很快。
注意:對于size比指針大的共享類,使用QVector會更好。

以下是兩個分別存儲int型數(shù)據(jù)和QDate類型數(shù)據(jù)的鏈表:
QList<int> intList;
QList<QDate> dateList;
對于字符串鏈表,Qt提供了QStringList類。它繼承自QList,但還提供了一些其他便于使用字符
串的函數(shù):QStringList::join()、QStringList::find()、QStringList::split()。

QList以鏈表形式存儲一組元素。默認為空鏈表,我們可以使用<<操作符添加元素:
QList<QString> list;
list << "one" << "two" << "three"; // list: ["one", "two", "three"]
QList提供了一系列添加、移動、刪除元素的操作:insert(), replace(), removeAt(), swap()
。此外,它還提供了便于操作的函數(shù):append(), prepend(), removeFirst(), removeLast()。
QList與C++中數(shù)組的索引方式一樣,都是從0開始的。我們可以使用[]操作符來訪問位于索引值
處的元素。對于非const鏈表,操作符[]返回的是該元素的引用,并且返回值可以用途左操作數(shù)。
if ( list[0] == "Bob" )
   list[0] = "Robert";
由于QList是以指針數(shù)組的形式實現(xiàn)的,該操作能夠很快地實現(xiàn)(時間復雜度為常數(shù))。對于只讀
訪問,我們可以用at()函數(shù)實現(xiàn)訪問:
for ( int i=0; i!=list.size(); ++i )
{
   if ( list.at(i) == "Jane" )
   { cout << "Found Jane at position:" << i<< endl;}
}
at()操作比操作符[]更快,因為它不需要深度復制(deep copy)。
QList的一個常用操作是,從鏈表中取出一個元素(元素不再在鏈表之中),并對該元素進行操作。
QList提供了以下操作來實現(xiàn)此功能:takeAt()、takeFirst()、takeLast()。以下是一個示例:
QList<QWidget *> list;
...
while ( !list.isEmpty() )
   deleta list.takeFirst();
由于QList在鏈表兩端都預先分配了緩存以應對鏈表兩端的快速添加操作,這樣就使得在QList的
兩端插入或刪除元素變得非常地快。
如果需要找出某個值在鏈表中出現(xiàn)的位置,我們可以使用indexOf()、lastIndexOf()函數(shù)來實現(xiàn)。
前者進行前向查找,而后者則進行反向查找。兩者都會在找到匹配元素后返回該元素的索引值。若
沒有找到匹配元素,則返回-1。例如:
int i = indexOf("Jane");
if ( i!=-1 )
   cout << "First occurance of Jane is at position" << i << endl;

如果僅僅是想判斷鏈表中是否包含某一值,我們可以使用函數(shù)contains()。如果希望知道某一值在
鏈表中的出現(xiàn)次數(shù),使用count()函數(shù)。如果要替換掉鏈表中所有值與某一值相同的元素,使用
replace()。

QList的值必須是可數(shù)的類型。這包含了我們常用的大多數(shù)類型。但是,如果我們存儲QWidget類型
的話,編譯器也不會通知我們出錯了。但是,我們應該使用QWidget *,而不是QWidget。此外,一
些函數(shù)還作出了其它限制,比如:indexOf()和lastIndexOf()操作要求值的類型能進行“==”操作。

與其他容器一樣,QList也提供了Java形式的迭代器(QListIterator和QMutableListIterator)。
以及STL形式的迭代器(QList::const_iterator和QList::iterator)。實際上,由于可通過索引值
來訪問元素,我們很少使用這些迭代器。使用索引值訪問元素的速度與迭代器相差無幾。

為了提高效率,QList的成員函數(shù)在使用前并不會驗證其參數(shù)是否有效。除isEmpty()函數(shù)外,其它
成員函數(shù)都會假定該容器為非空容器;使用索引值(index)進行操作的成員函數(shù)都會假定其索引值參
數(shù)是在有效范圍內(nèi)的。這就意味著,QList在有些時候會出錯。如果在編譯時,我們定義了QT_NO_DEBUG
,編譯過程中就不會檢測這些錯誤。如果沒有定義QT_NO_DEBUG,我們可以利用Q_ASSERT()或者
Q_ASSERT_X()加上一些合理的信息來實現(xiàn)錯誤檢測。

我們可以在調(diào)用其他函數(shù)之前先調(diào)用isEmpty()函數(shù)判斷鏈表是否為空,以避免對空鏈表進行錯
誤操作。而對于以索引值index為參數(shù)的成員函數(shù),我們還需要判斷該索引值是否位于有效范圍
內(nèi)。QList是一種表示鏈表的模板類。

QList<T>是Qt的一種泛型容器類。它以鏈表方式存儲一組值,并能對這組數(shù)據(jù)進行快速索引,
還提供了快速插入和刪除等操作。
QList、QLinkedList和QVector提供的操作極其相似:
* 對大多數(shù)操作來說,我們用QList就可以了。其API是基于索引(index)的,因此用起來比QLinkedList更方便(QLinkedList的API是基于迭代器的)。QList比QVector更快,這是由它
們在內(nèi)存中的存儲方式?jīng)Q定的。
* 需要使用QLinkedList的地方:
* 需要使用QVector的地方:元素的儲存位置彼此相鄰。

QList<T>表示為一組指向被存儲元素的數(shù)組。(例外,如果T本身就是指針類型,或者是size不
大于指針類型的基本類型,或者是Qt的共享類,那么QList<T>會直接在指針數(shù)組中存儲這些元素
。)元素個數(shù)小于1000的QList能夠很快地實現(xiàn)在鏈表中間插入操作,以及快速的查找操作。此
外,由于QList在鏈表兩端都預先分配了內(nèi)存,因此實現(xiàn)prepend()和append()操作都很快。
注意:對于size比指針大的共享類,使用QVector會更好。

以下是兩個分別存儲int型數(shù)據(jù)和QDate類型數(shù)據(jù)的鏈表:
QList<int> intList;
QList<QDate> dateList;
對于字符串鏈表,Qt提供了QStringList類。它繼承自QList,但還提供了一些其他便于使用字符
串的函數(shù):QStringList::join()、QStringList::find()、QStringList::split()。

QList以鏈表形式存儲一組元素。默認為空鏈表,我們可以使用<<操作符添加元素:
QList<QString> list;
list << "one" << "two" << "three"; // list: ["one", "two", "three"]
QList提供了一系列添加、移動、刪除元素的操作:insert(), replace(), removeAt(), swap()
。此外,它還提供了便于操作的函數(shù):append(), prepend(), removeFirst(), removeLast()。
QList與C++中數(shù)組的索引方式一樣,都是從0開始的。我們可以使用[]操作符來訪問位于索引值
處的元素。對于非const鏈表,操作符[]返回的是該元素的引用,并且返回值可以用途左操作數(shù)。
if ( list[0] == "Bob" )
   list[0] = "Robert";
由于QList是以指針數(shù)組的形式實現(xiàn)的,該操作能夠很快地實現(xiàn)(時間復雜度為常數(shù))。對于只讀
訪問,我們可以用at()函數(shù)實現(xiàn)訪問:
for ( int i=0; i!=list.size(); ++i )
{
   if ( list.at(i) == "Jane" )
   { cout << "Found Jane at position:" << i<< endl;}
}
at()操作比操作符[]更快,因為它不需要深度復制(deep copy)。
QList的一個常用操作是,從鏈表中取出一個元素(元素不再在鏈表之中),并對該元素進行操作。
QList提供了以下操作來實現(xiàn)此功能:takeAt()、takeFirst()、takeLast()。以下是一個示例:
QList<QWidget *> list;
...
while ( !list.isEmpty() )
   deleta list.takeFirst();
由于QList在鏈表兩端都預先分配了緩存以應對鏈表兩端的快速添加操作,這樣就使得在QList的
兩端插入或刪除元素變得非常地快。
如果需要找出某個值在鏈表中出現(xiàn)的位置,我們可以使用indexOf()、lastIndexOf()函數(shù)來實現(xiàn)。
前者進行前向查找,而后者則進行反向查找。兩者都會在找到匹配元素后返回該元素的索引值。若
沒有找到匹配元素,則返回-1。例如:
int i = indexOf("Jane");
if ( i!=-1 )
   cout << "First occurance of Jane is at position" << i << endl;

如果僅僅是想判斷鏈表中是否包含某一值,我們可以使用函數(shù)contains()。如果希望知道某一值在
鏈表中的出現(xiàn)次數(shù),使用count()函數(shù)。如果要替換掉鏈表中所有值與某一值相同的元素,使用
replace()。

QList的值必須是可數(shù)的類型。這包含了我們常用的大多數(shù)類型。但是,如果我們存儲QWidget類型
的話,編譯器也不會通知我們出錯了。但是,我們應該使用QWidget *,而不是QWidget。此外,一
些函數(shù)還作出了其它限制,比如:indexOf()和lastIndexOf()操作要求值的類型能進行“==”操作。

與其他容器一樣,QList也提供了Java形式的迭代器(QListIterator和QMutableListIterator)。
以及STL形式的迭代器(QList::const_iterator和QList::iterator)。實際上,由于可通過索引值
來訪問元素,我們很少使用這些迭代器。使用索引值訪問元素的速度與迭代器相差無幾。

為了提高效率,QList的成員函數(shù)在使用前并不會驗證其參數(shù)是否有效。除isEmpty()函數(shù)外,其它
成員函數(shù)都會假定該容器為非空容器;使用索引值(index)進行操作的成員函數(shù)都會假定其索引值參
數(shù)是在有效范圍內(nèi)的。這就意味著,QList在有些時候會出錯。如果在編譯時,我們定義了QT_NO_DEBUG
,編譯過程中就不會檢測這些錯誤。如果沒有定義QT_NO_DEBUG,我們可以利用Q_ASSERT()或者
Q_ASSERT_X()加上一些合理的信息來實現(xiàn)錯誤檢測。

我們可以在調(diào)用其他函數(shù)之前先調(diào)用isEmpty()函數(shù)判斷鏈表是否為空,以避免對空鏈表進行錯
誤操作。而對于以索引值index為參數(shù)的成員函數(shù),我們還需要判斷該索引值是否位于有效范圍
內(nèi)。

本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
第2章 Qt 5模板庫、工具類及控件
Python語言編程系列008----enumerate()及zip()函數(shù)的使用例子
QT容器類
QMap與QHash
Qt中豐富的容器類
Python基礎(chǔ)知識——元組(tuple)詳細講解
更多類似文章 >>
生活服務(wù)
熱點新聞
分享 收藏 導長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服