c++ - 指针容器上的 std::for_each

标签 c++ pointers foreach hashset

在某些类(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/

相关文章:

c++ - 当传递对实现接口(interface)的类的引用时,优先选择重载函数

c++ - 为什么 n*n 在循环的第一个瞬间结果为 4?对我来说应该是 1*1。相反,它是 2*2

c++ - C 中的全局变量不连续

C++ 在堆上分配相同类型的变量会花费非常不同的时间

javascript - 我如何处理参数数组以避免出现未定义的错误?

javascript - 在 foreach 中选择特定的单选项目

c++ - 具有堆对象和销毁冲突的数据类型的浅拷贝

c# - 类实例是引用类型,结构是值类型 C#。它是否也适用于 C++

c++ - 当数组作为调用函数中的参数传递时,为什么不能在被调用函数中使用 foreach 循环打印数组的值?

c++ - QGraphicsPixmapItem 在 QGraphicsScene 中缩放和旋转时的奇怪绘图行为