在某些类(class)中,我有一个 hash_set
指针数:
std::hash_set<GameObject*> gameObjects;
我希望遍历所有这些并调用更新。对于迭代器,这将是这样的:
for(std::hash_set<GameObject*>::iterator it = gameObjects.begin(), it_end = gameObjects.end(); it != it_end; ++it)
{
(*it)->update();
}
这段代码太多了;我想用 std::for_each
.
如果我有 hash_set<GameObject>
,这看起来像这样:
std::for_each(gameObjects.begin(), gameObjects.end(), std::mem_fun_ref(&GameObject::update));
或者,如果更新需要一个参数,
std::for_each(gameObjects.begin(), gameObject.end(), std::bind2nd(std::mem_fun_ref(&GameObject::update), deltaTime));
这两个表达式如何查找 hash_set
指针?
我正在使用 MS VisualStudio 2010。
最佳答案
如果你有一个支持 lambdas (C++11) 的编译器,你可以使用
std::for_each(gameObjects.begin(), gameObjects.end(), [=](GameObject* o) {o->update(deltaTime);});
对于许多 STL 算法,使用 lambda 是一个不错的选择,但是,正如@phresnel 指出的那样,在这种情况下,基于范围的 for 循环(也是 C++11)更加简洁:
for (auto o : gameObjects)
o->update(deltaTime);
关于c++ - 指针容器上的 std::for_each,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13234787/