大家都觉得C++循环迭代的写法可能比较麻烦,stl和boost中的foreach都提供了很好的替代。 这里简单比较一下两个的优缺点。
Stl::for_each用法
class out_times_x
{
private:
int multiplier;
public:
out_times_x(const int& k) : multiplier(k) { }
void operator()(const int& x) { cout << x * multiplier << " " << endl; }
};
out_times_x f2(2);
for_each(v.begin(),v.end(),f2); // Apply function
这里可以看出,我们把循环移植到一个谓词中,代码量并没有减少,逻辑也远离使用的地点。
Boost 中BOOST_FOREACH
的用法比较灵活。
我们看
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;
}
boost好处如下:(1)逻辑和使用没有脱离。
(2)可以支持跳出等循环操作
(3)支持反向遍历