std :: for_each在指针的容器上
std::for_each on container of pointers
在某些类中,我有指针的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 VisualStudio2010。
如果您的编译器支持Lambdas(C 11),则可以使用
std::for_each(gameObjects.begin(), gameObjects.end(), [=](GameObject* o) {o->update(deltaTime);});
使用lambdas是许多STL算法的不错选择,但是,正如@Phresnel指出的那样,在这种情况下,基于范围的循环(也是C 11)更简洁:
for (auto o : gameObjects)
o->update(deltaTime);
您可以使用相同的代码,但使用mem_fun
代替mem_fun_ref
std::for_each(gameObjects.begin(), gameObjects.end(),
std::mem_fun(&GameObject::update));
作为std::for_each
的替代方案,如果您的编译器和策略允许使用,则可以使用C '范围::
for (auto p : gameObjects) p->update();
使用C 11添加了此功能,即当前的C 标准。并非所有的编译器( - versions)可能支持它。
相关文章:
- C++指针在 for 循环中被覆盖
- 在 for 循环中定义的临时数组,并分配给属于指针数组的指针
- 使用基于范围的for循环取消对矢量指针的引用
- 在指针迭代中使用for循环时出现分段错误
- 用基于范围的for循环填充指针向量
- 静态指针指向这个为mock for googletest定义的类内部
- 指针上的 For 循环:它会移动整个地址范围吗?
- 找不到如何创建使用指针、字符和 for 函数组合的程序
- For 循环使用指针遍历数组无法正常工作
- 在这种情况下,我将如何继续 1 到 360 的"for loop"处理指针和地址?
- C++:使用数组、指针和 for 循环制作直方图。我就在那里,我可能想得太辛苦了
- 基于范围的 for 循环,用于包含C++中的指针的自定义链表,仅返回对象
- exc_bad_access on for loop(数组功能指针)
- 在<Object>基于范围的 for 循环中从 std::vector 获取指向对象的指针
- C++指针/for 循环混淆
- for 循环包括指针
- NAPI AsyncWorker:将指针数组转换为NAPI::array,而不使用大的for
- 在不使用For循环的情况下将数据从指向本地数组的指针传输到全局数组
- 指向数组的指针在 STL 和常规 for 循环中有所不同
- for 循环中的常量指针 (C++ 11)