是否可以使用函数在c ++中重新创建for循环

时间:2011-06-26 19:59:24

标签: c++ templates function loops

我最近写了一个简单的宏,因为我厌倦了为每个需要循环的向量输入相同的东西:

#define FORVEC(a,b) for(int b=0;b<a.size();b++)

所以我可以做类似

的事情
vector<sometype> stuff

FORVEC(stuff,i)
{
     stuff[i].dosomething();
}

我尽量避免使用宏,因为我被一位经验丰富的程序员告知我,以便尽可能避免使用宏。另外,我只是对如何使用函数(或者它需要的任何东西)感到好奇,因为这是我想要探索的领域。不是必须重新创建这个宏,虽然这将是一个良好的开端,但在定义它之后,我可以做类似的事情

mylooperfunction(param1,param2,param3) 
{
     //and now any code here would be run and looped in a way controlled by and defined in mylooperfunction
}

4 个答案:

答案 0 :(得分:5)

BOOST_FOREACH中有一个可以在C ++ 03中使用的更高级的版本。你所谈论的不是在C ++ 03中,而是在C ++ 0x中并引入了lambda表达式。

std::for_each(vec.begin(), vec.end(), [&](const T& ref) {
    ref.do_something();
});

特别是对于这种用途,它甚至还有一种新的语言功能,在我看来这是一个可怕的错误,但那只是我。上面的代码更通用。

答案 1 :(得分:1)

STL算法提供您正在寻找的功能:std::for_each

答案 2 :(得分:1)

已有两种解决方案:BOOST_FOREACHstd::for_each

答案 3 :(得分:0)

以下是将要发生的事情:

  1. 您忘记了宏的名称
  2. 你一遍又一遍地开始输入现有的迭代器
  3. 很快就可以自动输入
  4. 然后将不再需要您的宏
  5. 当然,到那里需要花费很少的精力,但每个人都会在某个时候到达那里......