使用foreach循环C ++更新std :: list中的每个值

时间:2014-10-29 03:36:24

标签: c++ loops c++11 foreach

我在C ++中获得了std::list而且我试图使用 for(Type t : list) 更新每个对象的值的操作。所以我有一个名为球的名单,每个球都有一个位置。循环的代码是:

for(OpenGLView::AssetInstance ball : balls)
            ball.position = calculateBallPosition(ball);

其中calculateBallPosition接受球并根据经过的时间返回其新位置。

我遇到的问题是列表中元素的值似乎没有更新。当我在循环运行后检查它们的值时,它与之前的相同。我猜测我的错误在于理解这个循环的工作方式,但我还没有弄清楚如何修复它。

1 个答案:

答案 0 :(得分:8)

您正在拍摄原始对象的副本,请使用参考

for(OpenGLView::AssetInstance& ball : balls)
            ball.position = calculateBallPosition(ball);

或者只是

for( auto& ball : balls)
            ball.position = calculateBallPosition(ball);