主要说Qt的以下几种容器
1.QList<T>
2.QLinkedList<T>
3.Map<T>
和一些常用的容器方法的使用
qSort
qCopy
qFind
1.QList<T>泛型集合是最常用的一种容器
看一下它的常用 操作
添加删除和两个迭代器
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(); }