类似perl和c#的foreach,BOOST_FOREACH给我们带来了一种简单而有效的遍历数组的方式。
让我们首先来看个简单的例子:
#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;
}
和传统的for或者std::for_each()算法比起来,BOOST_FOREACH显得更加优雅而简洁。
BOOST_FOREACH支持遍历所有被Boost.Range识别为序列类型的对象,通常包括如下几种:
- STL容器
- 数组
- 字符串strings
如下是几个常见的例子:
1. 用BOOST_FOREACH遍历STL容器
std::list<int> list_int( /*...*/ );
BOOST_FOREACH( int i, list_int )
{
// do something with i
}
2. 使用引用类型获取更高效的遍历
std::vector<std::vector<int> > matrix_int;
BOOST_FOREACH( std::vector<int> & row, matrix_int )
BOOST_FOREACH( int & i, row )
++i;
3. 使用break, continue,及return实现遍历循环的控制
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定义为更优雅的方式:
#define foreach BOOST_FOREACH
BOOST_FOREACH并不复杂,有兴趣的朋友可以看看,相信对提高大家的编程能力还是很有帮助的。