主要說Qt的如下幾種容器app
1.QList<T>性能
2.QLinkedList<T>spa
3.Map<T>code
和一些經常使用的容器方法的使用blog
qSortrem
qCopyit
qFindio
1.QList<T>泛型集合是最經常使用的一種容器table
看一下它的經常使用 操做class
添加刪除和兩個迭代器
QListIterator和QMutableListIterator
#include <QCoreApplication> #include<QList> #include<QDebug> int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); QList<int> listInt; //添加 for(int i =0;i<10;i++) { listInt.append(i); //也能夠這樣添加元素 //listInt<<i; } //刪除 qDebug()<<"刪除3"; listInt.removeAt(3); //查詢 foreach (int item, listInt) { qDebug()<<item; } qDebug()<<"Iterator"; //迭代器 QListIterator<int> iterator(listInt); while(iterator.hasNext()) { qDebug()<<iterator.next(); if(iterator.hasNext()) qDebug()<<"the Next is :"<<iterator.peekNext(); } //返轉 iterator.toBack(); while(iterator.hasPrevious()) { qDebug()<<iterator.previous(); } qDebug()<<"可變迭代器QMutableListIterator"; //可變的迭代器 QMutableListIterator<int> mutableiterator(listInt); mutableiterator.insert(13); mutableiterator.insert(14); mutableiterator.insert(15); while(mutableiterator.hasNext()) { int i= mutableiterator.next(); if(i==2||i==6) { mutableiterator.remove(); } } //查詢 foreach (int item, listInt) { qDebug()<<item; } return a.exec(); }
2.QLinkedList<T>
QLinkedList<T>和QList<T>差很少,不一樣的一點是它是用迭代器作的訪問項
也就是說QList<int> list只以經過這樣訪問它的內容list[i]而QLinkedList不能夠只能用Iterator
性能上它要高於QList<T>
#include <QCoreApplication> #include<QLinkedList> #include<QDebug> int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); QLinkedList<int> link; link<<1<<2<<2<<3<<4; qDebug()<<"迭代器訪問QLinkedListIterator"; QLinkedListIterator<int> iterator(link); while(iterator.hasNext()) { qDebug()<< iterator.next(); } //刪除第一個2 link.removeOne(2); //添加兩個3這兩種方式同樣 link.push_back(3); link.append(3); //刪除全部的3 link.removeAll(3); qDebug()<<"普通訪問foreach"; foreach (int item, link) { qDebug()<< item; } qDebug()<<"迭代器QMutableLinkedListIterator"; QMutableLinkedListIterator<int> mutableIter(link); while(mutableIter.hasNext()) { int i= mutableIter.next(); if(i==1) { mutableIter.insert(90); } if(i==4) { mutableIter.remove(); } qDebug()<<i; } qDebug()<<"迭代器QMutableLinkedListIterator從新訪問"; mutableIter.toFront(); while(mutableIter.hasNext()) { int i= mutableIter.next(); qDebug()<<i; } //mutable return a.exec(); }
a
3Map<T>
map類型是一個鍵值對 key/value組成 其它的和上邊的兩個集合沒什麼區別
#include <QCoreApplication> #include<QMap> #include<QDebug> int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); QMap<int,QString> map; map.insert(1,"a"); map.insert(2,"b"); map.insert(3,"c"); QMutableMapIterator<int,QString> mutableIte(map); while(mutableIte.hasNext()) { mutableIte.next(); qDebug()<<mutableIte.key()<<" "<<mutableIte.value(); } return a.exec(); }
下邊說一下經常使用的集合操做方法
qSort
qCopy
qFind
#include <QCoreApplication> #include<QList> #include<QDebug> #include<QVector> int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); QList<int> listStrs; listStrs<<10<<5<<8<<2<<7; qSort(listStrs); foreach (int i, listStrs) { qDebug()<<i; } qDebug()<<"____________________________"; listStrs.clear(); listStrs<<10<<5<<8<<2<<7; qSort(listStrs.begin()+1,listStrs.end()-1); foreach (int i, listStrs) { qDebug()<<i; } qDebug()<<"______________qCopy______________"; QVector<int> newVec(5); qCopy(listStrs.begin(),listStrs.end(),newVec.begin()); foreach (int i, newVec) { qDebug()<<i; } qDebug()<<"______________qFind______________"; listStrs.clear(); listStrs<<2<<5<<8<<2<<7; QList<int>::const_iterator iterFin=qFind(listStrs,2); if(iterFin!=listStrs.end()) { qDebug()<<*iterFin; } else { qDebug()<<"notFound!"; } return a.exec(); }