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

nsf*_*way 1 c++ templates loops function

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

#define FORVEC(a,b) for(int b=0;b<a.size();b++)
Run Code Online (Sandbox Code Playgroud)

所以我可以做点什么

vector<sometype> stuff

FORVEC(stuff,i)
{
     stuff[i].dosomething();
}
Run Code Online (Sandbox Code Playgroud)

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

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

Pup*_*ppy 5

BOOST_FOREACH你可以在C++ 03中使用更高级的版本.什么你说的是不是在C++ 03,但是 C++ 0x中引进lambda表达式.

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

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

  • 更好的是基于范围的for循环. (4认同)