Qt中的容器類 QList QLinkedList QVector..遍歷及相關
阿新 • • 發佈:2019-01-26
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;
}