一、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-hk/n/371480.html