QT中的容器和C++中的容器是很类似的,就是前面加了一个Q。容器分为关联容器和顺序容器,分类的标志应该是按照数据的存储或者排列来。
顺序容器:
顾名思义是按顺序来的,常见的C++中有List,vector,stack,queue等。所以在QT中就是
QList,QLinkedList,QVector,QStack和QQueue。
Qlist:数组链表。提供下标缩影方式访问数据,和数组是一样的,也提供at()函数。
示例:
QList
List<<”one”<<”two”<<”three”;
QString str1 = list[1];//str1 == “two”
QString str0 = list.at(0)//str2 == “one”
QLinkedList,链式列表。除了不提供下标索引的方式外,其使用和QList基本相同。
QStack:栈。
Push(value)和pop(),来实现输入和输出。这点和C++相同
QQueue:队列
Enqueue(value) 和 dequeue(),来实现输入和输出。
关联容器:QMap,QSet,QMultiMap,QHash,QMultiHash.
其中QMultiMap,QMultiHash。支持一个键关联多个值QSet,集合模板类。
示例:
QMap
QMap
map["one"] = 1;
map["two"] = 2;
map["three"] = 3;
map.insert("four",4);
map.remove("two");
int t = map["four"];
qDebug()<<"---"<
qDebug()<<"---"<
在使用value()函数值查找键值时,还可以指定一个缺省的返回值:
int num = map.value("two",10);
如果找到two,就返回相对应的值,否则返回10。
在QMultiMap中,如果要获得键所对应的所有的值,就需要使用values
迭代器:分为Java迭代器和STL迭代器。
STL迭代器:和C++中的迭代器一样,不过是多了一个只读迭代器。例如:
只读迭代器:QList
读写迭代器:QList
这里着重介绍下Java迭代器还是分为只读和读写两种:
读写迭代器比只读迭代器名称上在前面多了一个Mutable。Java类型的迭代器的指针不是指向一个数据项,而是在数据项之间。这个需要和C++中的STL迭代器区分开。
例如:QListIterator
QList
list<<"A"<<"B"<<"C";
QListIterator
// 由前至后
while (i.hasNext()) {
qDebug()<
}
这里的几个函数还是比较好理解的,如果有下一个(hasnext()),我就输出下一个(next());
那么同理,倒着来的话,如果有前一个,那就输出前一个!
//由后至前
QListIterator
m.toBack();
while (m.hasPrevious()) {
qDebug()<
}
OK,那么我们来简单的看看QMutableListIterator的使用。从定义来看这两个的定义就键和值的对应不同而已,并没有说使用上的不同,所以用法上是相同的。不在多说
QMutableListIterator的使用:
QList
list<<1<<2<<3<<4<<5;
QMutableListIterator
while(i.hasNext()){
if(i.next()%2==0)
i.remove();
qDebug()<
}
---------------------------------------------------------------------------------------------------------------------------------好的,顺序容器看完了,现在我们来看看Java关联容器的迭代器。
QMap,键和值的映射集合。先来看看用法
QMap<QString,QString> map;
map.insert("Paris","France");
map.insert("New York","USA");
map.insert("Mexico City","USA");
map.insert("Moscow","Russia");
QMutableMapIterator<QString,QString> m(map);
while(m.hasNext()){
if(m.next().key().endsWith("City")){
m.remove();
qDebug()<<"hello";
}
}
a.startsWith(b) --判断字符串a,是不是以字符串b开头
a.endsWith(b) --判断字符串a,是不是以字符串b结尾