QList
| 函数 | 作用 |
| insert(value) | 指定位置插入 |
| replace(value) | 替换 |
| removeAt(value) | 删除指定对象 |
| move() | 移动 |
| swap() | 交换 |
| append(value) | 在末尾添加 |
| prepend(value) | 从头部插入 |
| removeFirst() | 移除第一个对象 |
| removeLast() | 移除最后一个对象 |
| isEmpty() | 是否为空,为空则为true |
| size() | 返回数据项的个数 |
| at(i) | 获取第i个值 |
例如:
QListQLinkedListlist; list<<"one"<<"two"<<"three"; QString str1=list[1]; //"two" QString str0=list.at(0); //"one"
QLinkedList
QVector
QStack
| 函数 | 作用 |
| push(value) | 推入数据 |
| pop() | 弹出最上方的数据 |
QQueue
| 函数 | 作用 |
| enqueue(value) | 入队列 |
| dequeue() | 出队列w |
QSet
| 函数 | 作用 |
| contains(value) | 查找一个值是否包含于这个集合,查找成功为true |
QMap
| 函数 | 作用 |
| insert(key,value) | 插入一对键值 |
| remove(key) | 移除一个键值对 |
| values(key,[value]) | 查找一个值,找到了就返回这个值,没找到,可以设置一个value,来返回这个value |
| insertMulti() | 一般QMap不允许多值映射,但是使用这个函数可以添加键值对 |
例如:
//对map进行赋值,赋值是按顺序存储的 QMapQMultiMapmap; map["one"]=1; map["two"]=2; map["three"]=3;
QMultiMap
| 函数 | 作用 |
| insert(key,value) | 插入键值对 |
| replace(key,value) | 替换, 如果已经有一个项目有了键值,那么这个项目的值会被替换成value。 如果有多个带有key key的项目,最近插入的项目的值将被替换为value。 |
| value(key) | 访问最新插入的键的单个值 |
| values(key) | 获取键的所有值,返回值是QList |
QHash
QHash与QMap的功能和用法相似,区别如下:
- QHash比QMap的查找速度更快
- 在QMap上遍历时,数据项必须是按照键的排序的,而QHash的数据项是任意的
- QMap的键必须提供"<"运算符,QHash的键必须提供"=="运算符和一个名词为qHash()的全局散列函数
Java类型迭代器不是指向数据项,而是在数据项之间,如图:
常用函数:
例如:
//JAVA类型迭代器
//只读
QListIterator i(s);
//for循环
for (; i.hasNext();)
{
qDebug() << i.next();
}
i.toFront();
//while
while (i.hasNext())
{
qDebug() << i.next();
}
//读写
QMutableListIterator o(s);
o.toFront();
for (; o.hasNext();)
{
o.next(); //这里的o.next要和setvalue交换位置,因为,JAVA迭代器是从前面开始的,就是先next跳过这一项并返回跳过的这一项的值,用以下面的操作
o.setValue("帅");
}
o.toFront();
while (o.hasNext())
{
qDebug() << o.next();
}
注意:
Java类型的迭代器是指向数据项之间的,每次使用next()函数时,迭代器是先跳到下一对数据项之间,再返回跳过的数据项的值,供于下面的操作的。如图:
STL类型迭代器STL类型的迭代器是数组指针,并且是直接指向数据项的与Java的不同,所以“++”运算符可以使迭代器指向下一个数据项,“*”运算符可以返回数据项的内容。
注意:在定义只读迭代器和读写迭代器时,他们使用的是不同的关键字,此外还可以使用const_reverse_iterator和reverse_iterator定义相应的反向迭代器。
常用函数:
| 函数 | 作用 |
| begin() | [用于读写迭代器]使迭代器指向容器的第一个数据项 |
| end() | [用于读写迭代器]使迭代器指向一个虚拟的表示结尾的数据项 |
| constBegin() | [用于只读迭代器]表示起始位置 |
| constEnd() | [用于只读迭代器]表示结束位置 |
| rbegin() | [用于反向读写/只读迭代器]表示起始位置 |
| rend() | [用于反向读写/只读迭代器]表示结束位置 |
例如:
//STL类型迭代器
//只读
QList::const_iterator m;
for (m = s.constBegin(); m != s.constEnd(); m++)
{
qDebug() << *m;
}
//读写
QList::iterator n;
for (n = s.begin(); n != s.end(); n++)
{
*n = "牛";
qDebug() << *n;
}
foreach关键字
foreach是
foreach(variable , container)
variable和container里的类型是一样的
例如:
//foreach关键字
QList s;
//写法一
QString str;
foreach(str,s)
{
qDebug() << str;
}
//写法二
foreach(const string &str,s)
{
qDebug() << str;
}
注意:foreach是创建了容器的副本,所以不能修改原来容器变量的数据项,写法二里必须是常量定义的类型,const string &str


![[Qt]容器类、迭代器、foreach关键字 [Qt]容器类、迭代器、foreach关键字](http://www.mshxw.com/aiimages/31/869249.png)
