C++?Boost?Foreach超詳細(xì)分析講解
一、說明
Boost.Foreach 提供了一個宏來模擬 C++11 中基于范圍的 for 循環(huán)。您可以使用在 boost/foreach.hpp 中定義的宏 BOOST_FOREACH 來迭代序列而不使用迭代器。如果你的開發(fā)環(huán)境支持C++11,可以忽略Boost.Foreach。
二、示例代碼
2.1 最簡單的代碼
#include <string>
#include <iostream>
#include <boost/foreach.hpp>
int main()
{
std::string hello("Hello, world!");
BOOST_FOREACH(char ch, hello)
{
std::cout << ch;
}
return 0;
}運(yùn)算結(jié)果:

2.2 使用BOOST_FOREACH與BOOST_REVERSE_FOREACH
#include <boost/foreach.hpp>
#include <array>
#include <iostream>
int main()
{
std::array<int, 4> a{{0, 1, 2, 3}};
BOOST_FOREACH(int &i, a)
i *= i;
BOOST_REVERSE_FOREACH(int i, a)
{
std::cout << i << '\n';
}
}運(yùn)算結(jié)果:

BOOST_FOREACH 需要兩個參數(shù)。第一個參數(shù)是一個變量或引用,第二個是一個序列。第一個參數(shù)的類型需要與序列中元素的類型相匹配。
任何提供迭代器的東西,比如標(biāo)準(zhǔn)庫中的容器,都被歸類為一個序列。 Boost.Foreach 使用 Boost.Range 而不是直接訪問成員函數(shù) begin() 和 end()。然而,因為 Boost.Range 是基于迭代器的,任何提供迭代器的東西都與 BOOST_FOREACH 兼容。
示例 52.1 使用 BOOST_FOREACH 迭代 std::array 類型的數(shù)組。傳遞的第一個參數(shù)是一個引用,這樣您就可以讀取和修改數(shù)組中的元素。在示例 52.1 中,第一個循環(huán)將每個數(shù)字與自身相乘。
第二個循環(huán)使用宏 BOOST_REVERSE_FOREACH,它的工作原理與 BOOST_FOREACH 相同,但在一個序列上向后迭代。該循環(huán)按順序?qū)?shù)字 9、4、1 和 0 寫入標(biāo)準(zhǔn)輸出流。
和往常一樣,如果塊只包含一個語句,則大括號可以省略。
請注意,您不應(yīng)使用使循環(huán)內(nèi)的迭代器無效的操作。例如,在向量上迭代時不應(yīng)添加或刪除元素。 BOOST_FOREACH 和 BOOST_REVERSE_FOREACH 要求迭代器在整個迭代過程中有效。
三、BOOST_FOREACH特點和應(yīng)用范圍
和傳統(tǒng)的for或者std::for_each()算法比起來,BOOST_FOREACH顯得更加優(yōu)雅而簡潔。
BOOST_FOREACH支持遍歷所有被Boost.Range識別為序列類型的對象,通常包括如下幾種:
- STL容器
- 數(shù)組
- 字符串strings
如下是幾個常見的例子:
1. 用BOOST_FOREACH遍歷STL容器
2. 使用引用類型獲取更高效的遍歷
std::list<int> list_int( /*...*/ );
BOOST_FOREACH( int i, list_int )
{
// do something with i
}std::vector<std::vector<int> > matrix_int;
BOOST_FOREACH( std::vector<int> & row, matrix_int )
BOOST_FOREACH( int & i, row )
++i;
四、遍歷循環(huán)控制
使用break, continue,及return實現(xiàn)遍歷循環(huán)的控制
std::deque<int> deque_int( /*...*/ );
int i = 0;
BOOST_FOREACH( i, deque_int )
{
if( i == 0 ) return;
if( i == 1 ) continue;
if( i == 2 ) break;
}此外,還一個小訣竅就是通過define將BOOST_FOREACH定義為更優(yōu)雅的方式:
#define foreach BOOST_FOREACH
BOOST_FOREACH并不復(fù)雜,有興趣的朋友可以看看,相信對提高大家的編程能力還是很有幫助的。
到此這篇關(guān)于C++ Boost Foreach超詳細(xì)分析講解的文章就介紹到這了,更多相關(guān)C++ Boost Foreach內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C++ 中的 mutable關(guān)鍵字作用與使用場景分析(最新推薦)
C++中的mutable關(guān)鍵字允許在常量成員函數(shù)中修改特定成員變量,主要用于緩存機(jī)制、延遲計算和多線程同步等場景,它在設(shè)計中提供靈活性,但使用時需謹(jǐn)慎,本文介紹C++ 中的 mutable關(guān)鍵字作用與使用場景分析,感興趣的朋友一起看看吧2025-02-02
Linux下使用C/C++進(jìn)行UDP網(wǎng)絡(luò)編程詳解
UDP 是User Datagram Protocol 的簡稱,中文名是用戶數(shù)據(jù)報協(xié)議,是一種無連接、不可靠的協(xié)議,本文主要介紹了如何在Linux下使用C/C++進(jìn)行UDP網(wǎng)絡(luò)編程,有需要的可以了解下2024-10-10
C語言中 int main(int argc,char *argv[])的兩個參數(shù)詳解
這篇文章主要介紹了C語言中 int main(int argc,char *argv[])的兩個參數(shù)詳解的相關(guān)資料,需要的朋友可以參考下2017-03-03
c語言標(biāo)準(zhǔn)庫中字符轉(zhuǎn)換函數(shù)和數(shù)字轉(zhuǎn)換函數(shù)
這篇文章主要介紹了c標(biāo)準(zhǔn)庫中字符轉(zhuǎn)換函數(shù)和數(shù)字轉(zhuǎn)換函數(shù),需要的朋友可以參考下2014-04-04
C++實現(xiàn)坦克大戰(zhàn)小游戲EGE圖形界面
這篇文章主要為大家詳細(xì)介紹了C++實現(xiàn)坦克大戰(zhàn)小游戲EGE圖形界面,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2020-03-03

