for_each C++ Problem
for_each C++ Problem
我对C++中的for each循环感到困惑。我在一个主要的游戏循环中有这样的代码:
for each (Bubble b in bubbles){
b.Update();
}
for each (Bubble b in bubbles){
b.Draw();
}
它不会更新任何内容,但会绘制1个气泡。。它怎么了?
编辑:此代码适用于
struct BubbleUpdater {
void operator()(Bubble & b) { b.Update(); }
} updater;
struct BubbleDrawer {
void operator()(Bubble & b) { b.Draw(); }
} drawer;
void OnTimer(){ //this is my main game loop
std::for_each(bubbles.begin(),bubbles.end(),drawer);
std::for_each(bubbles.begin(),bubbles.end(),updater);
}
我在C#中也遇到过这个问题,它让我疯狂了一段时间。根据我的发现,for each循环为集合中的每个对象创建一个新对象。因此,它是通过值而不是通过引用来创建的(如果您使用循环的标准),这会导致原始集合不受影响。我总是发现每个循环都适合阅读,但不适合更新。
通过引用更改BubbleUpdater类以接受其参数
struct BubbleUpdater {
void operator()(Bubble & b) { b.Update(); }
} updater;
这样,您对std::for_each
的调用应该会起作用。
如果您的编译器支持它(VC10也支持),那么您可以使用lambdas,而不是创建一个远程函数对象类。是的,这是标准的c++,或者很快就会实现。
std::for_each (bubbles.begin(), bubbles.end(), [](Bubble & b){
b.Update();
});
这不是C++,而是来自内存的Qt扩展。每个循环的新C++0x将具有语法
for(type identifier : expression)
即
for(auto x : std::string("ohai"))
然而,在C++03中,并没有专门针对每个循环语言结构。
for each
不是有效的c++,如果您考虑的是std::for_each()
或BOOST_FOREACH
,它们有不同的语法。
std::for_each
是一个函数,具有以下接口:
std::for_each(InputIterator begin, InputIterator end, function f);
BOOST_FOREACH
是一个预处理器宏,具有以下接口:
BOOST_FOREACH(element e, container c)
{
do_thing(e);
e.whatever();
}
相关文章:
- 无法让 Assimp 在 Windows " linker problem" 上运行?(与2019年相比)
- C++ Winsock unicode problem
- QT QStackedLayout problem
- Problem with Android ndk
- OpenGL SuperBible header problem
- WaitForSingleObject problem
- Anderson tree problem
- for_each C++ Problem
- Getline problem
- CDialog ShowWindow problem
- SLOT problem / C++
- BitBlt Problem GDI
- Problem with C# COM
- eof problem c++
- Problem with Euler 27