不知道你是否为类似的迭代纠结过?
for(XXX:iterator itr = _vec.begin(); itr != _vec.end(); ++itr)
千篇一律的for 循环,不同的只是迭代类型,虽说STL提供了for_each允许迭代,可每次需写一个访问函数作为参数传入,这也不太方便。BOOST_FOREACH可以有效的解决:
#include <iostream>
#include <string>
#include "boost/foreach.hpp"
using namespace std;
int main(int argc, char* argv[])
{
string str("hello world!");
BOOST_FOREACH(const char& c, str)
{
cout << c;
}
cout << endl;
return 0;
}
很简洁的一个宏,就替代了一个冗长的for循环。
如foreach库作者(Copyright © 2004 Eric Niebler)所言,BOOST_FOREACH之所以能良好运行,要归功于C/C++里并不起眼的三目运算符?:,通过条件表达式可以encode一个表达时的类型而无需evaluating;可以用来判断一个表达式是否为左值(left-value),下面就来看看它妙在哪里。