1. QList
QList 是最常用的容器类,其内部维护了一个指针数组,因此可以支持通过下标来访问。
(1) 常规下标遍历
#include <QtCore/QCoreApplication>
#include <QDebug>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
QString str1 = "One";
QString str2 = "Two";
QString str3 = "Three";
QList <QString> list;
list << str1 << str2 << str3;
/*遍历方法 1: 常规下标*/
for (int i = 0; i < list.size(); i++)
{
qDebug() << list[i];
//qDebug() << list.at(i);
}
...
}
(2) 只读迭代器
QListIterator<T> 是Java风格的只读迭代器。支持的操作列表如下:
API | 使用说明 |
toBack | 将迭代点移动到最后一个列表项后面 |
hasPrevious | 检查当前迭代点之前是否具有列表项 |
previous | 返回前一个列表项的内容,并将迭代点前移1位 |
hasNext | 检查当前迭代点之后是否具有列表项 |
next | 返回后一个列表项的内容,并将迭代点后移1位 |
toFront | 将迭代点移动到最前端,(第一个列表项之前) |
peekNext | 返回后一个列表项的内容,但不移动迭代点 |
peekPrevious | 返回前一个列表项的内容,但不移动迭代点 |
findNext | 查找指定的列表项,并将迭代点移动到该列表项之后。并返回True, 若未找到返回False, 迭代点移动到列表后端 |
findPrevious | 类似于findNext |
#include <QtCore/QCoreApplication>
#include <QDebug>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
QString str1 = "One";
QString str2 = "Two";
QString str3 = "Three";
QList <QString> list;
list << str1 << str2 << str3;
/*遍历方法: 迭代器*/
QListIterator<QString> j(list);
for (; j.hasNext();)
qDebug() << j.next();
return a.exec();
}
(3) 读写迭代器
QMutableListIterator<T> 除支持只读迭代器的属性外,还支持写入,删除等操作。
API | 使用说明 |
insert | 插入列表项 |
remove | 删除列表项 |
setValue | 修改列表项的值 |
2. QLinkedList
链式列表,以非连续的内存块保存数据。不能使用下标,必须使用迭代器来访问。迭代器与QList 用法一致
只读迭代器 | 读写迭代器 |
QLinkedListIterator | QMutableLinkedListIterator |
3. QMap 与 QHash
QMap<key,T> 提供了一个Key值到T的映射
QMap<QString, int> map;
map.insert("KEY1", 1);
map.insert("KEY2", 2);
map.insert("KEY3", 3);
QMapIterator<QString, int> i(map);
for (; i.hasNext();)
qDebug() << i.next().key();
for (i.toFront(); i.hasNext();)
qDebug() << i.next().value();
QMutableMapIterator<QString, int> j(map);
if (j.findNext(2))
j.setValue(4);
QMapIterator<QString, int> k(map);
for (k.toFront(); k.hasNext();)
qDebug() << k.next().value();