1. 程式人生 > >Qt中的容器類 QList QLinkedList QVector..遍歷及相關

Qt中的容器類 QList QLinkedList QVector..遍歷及相關

http://hi.baidu.com/china_0000/item/fa8712f8e3b5ccc00cd1c828

QList<T>是最常用的容器類,他儲存給定型別的資料型別T的一列直,,可以在列表中追加QList::append();and QList::preppend();and QList::insert()..

他所維護的是一個一指標陣列,該陣列儲存的指標指向儲存列表項的直,因此可以採用下標進行快速訪問。

QList<QString> list;
string str="i am turing ,welcome to Qt.";
list<<str;
qDebug()<<list(0);

其中的QStringList 就是從這邊繼承下來的

QLinkedList<T>是一個鏈式列表,它以非連續的記憶體快儲存資料,所以他是不能使用下標進行訪問的,,也就是說他更適合插入的操作,時間是在O(1).

QVector<T>這個方式是在相鄰的記憶體位置上儲存資料的,也就是以陣列的方式進行儲存的,所以對起進行插入的操作的時候是一項很耗時間的,因為要有大量的資料進行一動。。當然也是可以通過下標對其進行訪問的。

Qt的容器類為遍歷其中的操作提供了兩種方法:
1.java風格的迭代器,
2。STL風格的。

下面介紹STL風格
QList<T> QList<T>::const_iterator QList<T>::iterator///中間那個是隻讀的,最後是可讀寫的
QLinkedList<T> QLinkedList<T>::const_iterator QLinkedList<T>::iterator
下面那個同理
這個風格的迭代器是建立在指標的基礎上的,++指向下一個,*返回指向的項。

下面再以QList來簡單介紹他們的迭代器具體的API介面
QList<T>::begin()///返回指向第一個列表項的迭代器,這個是有效的
QList<T>::end()//返回的是容器最後列表項之後的下一個,也就是標記的是無效的那個,

#include <QDebug>

int main(int argc, char *argv[])
{
QList<int> list;
for(int j=0; j<10; j++)
list.insert(list.end(), j);//表示在列表的最後插入直j

QList<int>::iterator i;
for(i=list.begin(); i!=list.end(); ++i)
{
qDebug() << (*i);
*i = (*i) * 10;
}

QList<int>::const_iterator ci;
for(ci=list.constBegin(); ci!=list.constEnd(); ++ci)
qDebug() << *ci;

return 0;
}