一、foreach概述
Qt的foreach是一个非常方便且易于使用的迭代器。它能够迭代遍历一个集合中的所有元素,无需我们手动指定迭代器的起始位置和终止位置,也无需编写while循环。Qt foreach语法与Java foreach语法非常相似,可以很容易地上手使用。
QListlist; list.append("John"); list.append("Frank"); list.append("Amy"); foreach(QString str, list) { qDebug()< 二、foreach遍历数组
在C++中,数组也可以看做是一种集合。那么,我们可以使用Qt foreach遍历数组,代码简单直接。
int arr[5] = {1, 2, 3, 4, 5}; foreach(int i, arr) { qDebug()<三、foreach遍历QString
QString是Qt中经常使用的字符串类型,我们也可以使用Qt foreach遍历QString中的每个字符。
QString str = "Hello Qt"; foreach(QChar c, str) { qDebug()<四、foreach遍历QList和QVector
QList和QVector是Qt常用的两种容器类型,它们都可以使用Qt foreach进行遍历。
QListlist; list<<1<<2<<3; foreach(int i, list) { qDebug()< vec; vec<<"John"<<"Frank"<<"Amy"; foreach(QString str, vec) { qDebug()< 五、在foreach中修改容器元素
有时候,我们需要在foreach中对容器的元素进行修改。由于foreach是使用值拷贝迭代容器的元素的,修改容器元素会发生无法预料的行为。为了避免这种情况,我们可以使用引用来遍历容器。
QListlist; list<<1<<2<<3; foreach(int& i, list) { i++; } foreach(int i, list) { qDebug()< 六、倒序遍历容器元素
有时候,我们需要倒序遍历容器元素。通常的思路是先获取容器的长度,再从后向前遍历。这种方式虽然可行,但是代码冗长而且不够简洁。使用reverse_iterator迭代器进行倒序遍历是一个更好的选择。
QListlist; list<<1<<2<<3; QList ::reverse_iterator i; for (i = list.rbegin(); i != list.rend(); ++i) { qDebug()<<*i; } 七、foreach和lambda表达式
Qt foreach与lambda表达式结合使用,可以实现更加灵活的定制化需求。lambda表达式可以在foreach中进行过滤和映射等操作。
QListlist; list<<1<<2<<3<<4<<5; QVector vec; QList ::const_iterator iter = std::find_if(list.constBegin(), list.constEnd(), [](int i){return i>3;}); foreach(int i, iter, list.constEnd()) { vec< 八、foreach和STL算法
Qt foreach能够与STL算法进行结合使用,能够更加高效地对容器中的元素进行操作。Qt提供了一个Q_FOREACH宏,使用它可以自动解析foreach语句中的集合类型,从而可以适用于不同类型的集合。
#include#include Q_FOREACH(int i, std::vector {1, 2, 3, 4}) { qDebug()< {1, 2, 3, 4, 5}) { if (i == 3) { break; } else { qDebug()< 九、总结
Qt foreach是一个非常便捷的迭代器,能够快速地遍历容器中的所有元素。它的语法简单直接,容易上手。使用Qt foreach能够大大简化代码,提高开发效率。