我最近写了一个简单的宏,因为我厌倦了为每个需要循环的向量输入相同的东西:
#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
}
答案 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_FOREACH
和std::for_each
。
答案 3 :(得分:0)
以下是将要发生的事情:
当然,到那里需要花费很少的精力,但每个人都会在某个时候到达那里......