Qt: 容器类和迭代器类、foreach关键字
2016-07-18 01:40
441 查看
引言:
容器类和迭代器类提供 删除、修改、插入和保存数据的功能。这两种类可以将各种数据类型的数据以元素为单位进行存储。
例如:
不使用Qt提供的容器类:如果要将QString类型的数据存储到数组,则事先我们必须要知道有多少个元素需要存储。
使用Qt提供的容器类:容器类将QString数据存储到可变大小的数组时,可以使用QVector<QString>的容器类插入、删除和修改数据。十分的方便。
Qt容器类
Qt提供的容器类非常简单、轻便和安全。Qt还提供foreach关键字,使用该关键字可以轻松的访问容器类存储的元素。Qt容器类(表)
容器类可以将多种数据集合为一体。如:QMap<QString , QList<int>>。
风格:
容器类用于存储数据,而迭代器类则用于访问容器类存储的特定项目的聚合模式。根据迭代器的风格,可以分为java风格和STL风格。个人感觉java风格的迭代器模式要比STL风格的迭代器模式使用起来更为方便。对于各个容器类,java风格的迭代器有两种数据类型,分别是
只读访问模式 和 读写访问模式。
容器 | 只读迭代器 | 读写迭代器 |
Qlist<T>,Qqueue<T> | QListIterator<T> | QMutableListIterator<T> |
QLinkList<T> | QLinkListIterator<T> | QMutableLinkListIterator<T> |
Qvector<T>,Qstack<T> | QVectorIterator<T> | QMutableVectorIterator<T> |
Qset<T> | QSetIterator<T> | QMutableSetIterator<T> |
Qmap<Key,T>,QMultiMap<Key,T> | QMapIterator<Key,T> | QMutableMapIterator<Key,T> |
Qhash<Key,T>,QMultiHash<Key,T> | QHashIterator<Key,T> | QMutableHashIterator<Key,T> |
java风格容器类实例:
#include <QCoreApplication>#include <QDebug>
#include <QList>
#include <QListIterator>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
QList<QString>list;
list<<"123"<<"456"<<"789";
QListIterator<QString>m(list);
while (m.hasNext()) {
qDebug()<<m.next();
}
qDebug()<<"******";
while(m.hasPrevious())
{
qDebug()<<m.previous();
}
return a.exec();
}
运行结果:
foreach关键字:
使用foreach关键字访问迭代器格式:foreach(变量,容器)
注意:foreach关键字不是C++标准提供的,而是由Qt提供的。
实例:
#include <QCoreApplication>#include <QDebug>
#include <QList>
#include <QListIterator>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
QList<QString>list;
list<<"123"<<"456"<<"789";
QString str;
foreach (str, list) {
qDebug()<<str;
}
return a.exec();
}
运行结果:
各个容器类提供的函数,可以通过查看Qt Assistant获取。
相关文章推荐
- qt之设置快捷方式
- QT学习之路
- Qt-装饰者模式
- Qt Error: moc_*.cpp error
- Qt之事件系统
- Qt之事件系统
- Qt之事件系统
- Ubuntu 16.04 x64 Qt 5.6连接MySQL数据库笔记
- Qt 5.6 编译加载ODBC
- Qt4过渡至Qt5
- Qt 5在windows和Mac下的安装使用
- SPOJ QTREE (树链剖分 基于边权)
- UTF(QTP)与Mysql的连接心得
- Qt中将QString转换为char *或者相反
- QString类型转化成const char *类型
- QT中SIGNAL与SLOT连接的几种方式
- 怎么判断focusWidget()返回的是哪类型控件
- Qt-观察者模式
- 基于 libev 的 Qt 事件调度器:qt_eventdispatcher_libev
- Qt setMargin()和setSpacing() 的含义