为什么我的矢量中的项目在 C++ 中的 for-each 循环期间不会改变?

Why won't the items in my vector change during for-each loop in C++?

本文关键字:循环 for-each 改变 中的 C++ 我的 项目 为什么      更新时间:2023-10-16

我是C 的新手,通常在Java中代码。我很难了解C 中的容器与Java中的相同和不同。

对于我现在正在做的项目,我制作了自己的数据结构称为solar_body。这些中的每一个都包含一个名称,质量,半径和3个数据结构,称为position_t,velocity_t和Acceleration_t。希望这些名字是自我解释的。

我正在使用矢量保存我程序中的solar_body对象的集合。我似乎已经使用Java知道的for-each循环发现了一个问题,希望有人可以解释发生了什么。

i通过向量循环,调用每个对象上的更新方法(solar_body.update())。这根据该迭代的当前加速度计算新的速度和位置。当我第一次设置此设置时,我进行了这样的循环:

for (solar_body body: bodies) {
  body.update(); }

当我这样做并打印变量时,速度和位置会更新。但是,在我下次循环迭代中,新值已经消失,它们又回到了相同的旧值。似乎for-each循环在solar_body对象的副本上进行操作。

出于好奇,我将循环更改为:

for (int i=0; i<bodies.size(); i++) {
  bodies.at(i).update(); }

这正如我预期的那样起作用。在Java中,使用这两个循环实际上没有差异。在这种情况下,我不明白的情况发生了什么?

事先感谢您的帮助。

for (solar_body body : bodies)

这是按值迭代的;也就是说,它创建了bodies元素的副本,并将其放入body中,在迭代期间。然后它继续进入下一个元素,依此类推。通过引用迭代,以便您可以修改元素,您需要以下内容:

for (solar_body& body : bodies)