c++变量在每次循环迭代期间被覆盖
c++ Variable being overwritten during each loop iteration
我正在开发模拟软件,该软件要求实体在其功能的某些方面有一些预先确定的行为。我目前正在研究的行为是将模拟环境中的实体设置为围绕用户确定的点以"螺旋"方式移动。
用户可以通过从GUI中选择特定选项来为实体设置几种现有的行为选择。我打算实现这种新行为的方式如下:
- 获取从实体的当前位置到缓和曲线原点(用户指定的实体将绕其进行缓和曲线旋转的点)的角度
- 检查图元与缓和曲线原点的当前距离:
- 如果距离原点大于一定距离,则直接向原点移动,直到距离原点一定距离,然后开始螺旋上升
- 如果它距离原点小于一定距离,请远离原点,直到它距离原点一定距离,然后开始螺旋上升
- 每当实体完成螺旋线的回路时,GUI中显示的显示已完成回路数的值都应更新
我已经开始编写一个循环来实现这种行为,我打算通过在循环的每次迭代中检查实体与原点的角度来增加完成的电路数量——每次该角度与螺旋行为发生时的角度相同时,我就会知道另一个电路已经完成。但是,由于我在循环开始时得到实体和原点之间的角度,该值将随着循环的每次迭代而更新,这意味着实体将永远不会从原点达到该角度,因为角度将不断变化。
我想知道的是,是否有一种方法可以在循环的第一次迭代中设置变量的值,然后在循环的任何其他迭代中不再更改该值?我是否可以将该值分配给全局变量,并使其成为"绝对"值,这样即使我再次尝试更改其值,也无法更改?
编辑
显而易见的建议是在循环之外设置角度变量值,但我不能这样做,因为已经实现的现有行为的性质,以及当用户选择其中一种行为时会发生什么。
听起来你应该在循环外进行循环的第一次迭代来设置这个一次性变量,然后在循环内进行n-1
迭代。如果循环体很复杂,请将其放入函数中。还要记住,如果你碰巧使用浮点值作为角度,那么在第一次迭代后,它们相等的可能性微乎其微。
int loop_body(params)
{
// Do stuff.
return first_iteration_value;
}
int initial_value = loop_body(params);
for(init; condition; incr)
{
loop_body(params);
}
相关文章:
- 使用std::multimap迭代器创建std::list
- 来自 std::list 的迭代器 .end() 按预期返回"0xcdcdcdcdcdcdcdcd"但 .begin()
- C++中带有List类的迭代器Segfault
- 迭代时从向量和内存中删除对象
- 如何在c++迭代器类型中包装std::chrono
- 带过滤器的现代迭代c++集合
- 在c++中检查长方体是否尽可能快地重叠(无迭代)
- C++矢量迭代
- 集合上的输出迭代器:assign和increment迭代器
- Boost Spirit,获取迭代器内部语义动作
- 擦除while循环中迭代的元素
- 实现一个在集合上迭代的模板函数
- 对于set上的循环-获取next元素迭代器
- 在向量内的向量上迭代
- 循环中的IF-ELSE条件:未来的迭代覆盖以前的迭代结果
- 创建库以覆盖迭代器的操作员*() - 风险悬挂指针
- 仅覆盖自定义数据架构的迭代器的操作员*()
- 我是否可以轻松覆盖 (STL) 迭代器的类别?
- c++变量在每次循环迭代期间被覆盖
- 迭代地向二叉树中添加一个新节点,根被覆盖