为什么我的矢量中的项目在 C++ 中的 for-each 循环期间不会改变?
Why won't the items in my vector change during for-each loop in C++?
我是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)
相关文章:
- C++ 中用于二维数组的 for-each 循环
- C++ Python 循环"for i, num in enumerate(list):"版本
- 计算 fib(n) 的次数称为 FOR EACH n
- 支持自定义 const 本机C++容器类的"for each"
- C++ for-each 语句触发"vector iterators incompatible"断言失败:this->_Getcont() == 0
- 为什么我的矢量中的项目在 C++ 中的 for-each 循环期间不会改变?
- 当循环返回"for each"项的 nullptr 时?
- C 多循环 for () 基础知识
- 正确使用C++ 'for each'选项
- "for each"能保证使用更改数组吗?
- 基于范围的循环与 for-each 循环有何不同
- C++:从"for each"循环中的映射中删除值
- 正在擦除for(-each)自动循环中的项目
- 将循环转移到C++03 for each
- 在 for-each 循环中使用 'auto' 时是否需要添加'const'?
- C++中的"for each"循环如何知道数组的长度
- 基本c++: for-each循环
- 如何使c++中的for each循环函数与自定义类一起工作
- 如何使用for-each循环来美化析构函数
- for-each 循环生成错误,但 for(it=begin()...在遍历 std::map 包含 unique_ptr 时不会