这些片段中哪个(性能)最好?
1)
for(list<Enemy*>::iterator iter = enemies.begin(); iter != enemies.end(); iter ++)
(*iter)->prepare(time_elapsed);
2)
for_each(enemies.begin(), enemies.end(), [time_elapsed] (Enemy *e) {e->prepare(time_elapsed);});
3)
for_each(enemies.begin(), enemies.end(), bind2nd(mem_fun1<void, Enemy, GLfloat>(&Enemy::prepare), time_elapsed));
最佳答案
Lambda 是最快的解决方案。引用基于堆栈的变量涉及特殊的优化。此外,在 C++0x 中,它们比任何绑定(bind)的东西都灵活得多,而且第一个循环也有清晰度的缺点。 Lambda 在各个方面都是 winrar。
但是,我正在认真考虑微优化,除非这是在运行数十亿次的真正、真正的内部循环中。
关于c++ - C++ 中的性能比较(普通函数调用与 for_each+mem_fun 与 lambda 表达式),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4366487/