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