一、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
微信扫一扫
支付宝扫一扫