c++ - C++ 中的性能比较(普通函数调用与 for_each+mem_fun 与 lambda 表达式)

标签 c++ lambda c++11 visual-c++-2010

这些片段中哪个(性能)最好?

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/

相关文章:

c++ - 与运行时相比,为什么三元运算符在编译时的工作方式不同?

c++ - 在 IShellFolder::EnumObjects() 中使用 IShellBrowser::BrowseObject()

c++ - 将 N x N 矩阵逆时针旋转 90 度。为什么填写值的顺序很重要?

java - lambda 表达式中使用的变量应该是最终变量或有效最终变量

c++ - C++ lambda 表达式可以抛出吗?

c++ - 如何创建非 POD 类型的连续内存池?

c++ - 接受无限相同数量的 3 种类型的函数

c++ - 用一些信息注释 C++ 二进制文件

c# - 使用 JS 函数调用的 MVC3 中的分页问题

python - python : How to get the average of the n largest values for each column grouped by id