加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

为什么我的矢量中的项目在C中的每个循环期间都不会发生变化?

发布时间:2020-12-16 09:50:15 所属栏目:百科 来源:网络整理
导读:我是C的新手,通常是 Java代码.我很难理解C中的容器是如何与我在Java中习惯的相同和不同. 对于我现在正在做的项目,我已经创建了自己的数据结构,称为solar_body.其中每个都包含名称,质量,半径和3个数据结构,称为position_t,velocity_t和acceleration_t.希望这
我是C的新手,通常是 Java代码.我很难理解C中的容器是如何与我在Java中习惯的相同和不同.

对于我现在正在做的项目,我已经创建了自己的数据结构,称为solar_body.其中每个都包含名称,质量,半径和3个数据结构,称为position_t,velocity_t和acceleration_t.希望这些名称是自我解释的.

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

我在向量上运行一个循环,调用每个对象上的update方法(solar_body.update()).这将根据该迭代的当前加速度计算新的速度和位置.当我第一次设置它时,我像这样做了我的for循环:

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

当我这样做并打印变量时,速度和位置会更新.但是,在我的下一个while循环迭代期间,新值将消失,并且它们将返回到相同的旧值.似乎for-each循环在solar_body对象的副本上运行,而不是原始对象.

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

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

这是我所期望的.在Java中,使用这两个循环的实践确实没有区别.在这种情况下发生了什么,我不明白?

在此先感谢您的帮助.

解决方法

for (solar_body body : bodies)

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

for (solar_body& body : bodies)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读