一、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/zh-tw/n/371480.html
微信掃一掃
支付寶掃一掃