【问题标题】:How to change object in for loop each time loop is run每次运行循环时如何在for循环中更改对象
【发布时间】:2015-02-24 02:52:40
【问题描述】:

我试图将与此问题相关的细节保持在最低限度,但我肯定会扩展任何使我的帖子更清晰的内容。

我对 C++ 还很陌生,所以请原谅我可能会提出一个显而易见的问题,我什至无法很好地表达这个问题以找到有用的搜索结果。

我最终会尝试编写一种用于行星运动的跨越式算法。我已经定义了一个类叫 planet

Planet(double mass, double x0, double x1, double v0, double v1)

然后我有对象

Planet p0(2.0, -0.5, 0, -0.94, 0.65);
Planet p1(1.0, -0.6, -0.2, 1.86, 0.7);
Planet p2(1.0, 0.5, 1.0, -0.44, -1.40);
Planet p3(0.4, 0.6, 0.3, 1.15, -1.50);

我想编写一个 for 循环,它将遍历每个循环,并从每个循环中获取一个特定的组件进行计算;计算牛顿的万有引力。我首先想测试如何从对象中获取特定组件。

我预想会是这样的

for(int j=0; j<4; ++j){
cout << p[j].getvx() << "\n";
}

已经定义了 getvx()。例如,当我尝试 p1.getvx() 时,它工作正常。

所以我的问题是,我如何在不输入 p0、p1 等的情况下从 0 到 3 获得 j 的 p[j]?可以在 for 循环中完成吗,我缺少一些语法吗?

【问题讨论】:

标签: c++ algorithm for-loop numerical-methods runge-kutta


【解决方案1】:

如果你有一个 C++11 编译器,你可以在循环中轻松地做到这一点:

for (auto& p : {p0, p1, p2, p3}}
{
    cout << p.getvx() << "\n";
}

否则,最简单的解决方案是将行星制作成一个数组,而不是四个单独的对象。

编辑:要使用数组,您可以这样做:

Planet planets[] = {
    Planet(2.0, -0.5, 0, -0.94, 0.65),
    Planet(1.0, -0.6, -0.2, 1.86, 0.7),
    Planet(1.0, 0.5, 1.0, -0.44, -1.40),
    Planet(0.4, 0.6, 0.3, 1.15, -1.50)
};

for (int i = 0; i < sizeof(planets) / sizeof(planets[0]); ++i)
{
    cout << planets[i].getvx() << "\n";
}

【讨论】:

  • 当我尝试这样做时,我收到一个错误“错误:ISO C++ 禁止在没有类型 [-fpermissive]| 的情况下声明 'p'”。我正在使用最新版本的 Code::Blocks,所以我认为它会使用 C++11。也许将行星放在一个数组中会更容易,但是当它们是一个类的对象时,我真的不知道如何。
  • @user142340,开启c++11。我假设您使用的是 g++?
  • 行星 p[4] = {2.0, -0.5, 0, -0.94, 0.65, 1.0, -0.6, -0.2, 1.86, 0.7, 1.0, 0.5, 1.0, -0.44, -1.40 , 0.4, 0.6, 0.3, 1.15, -1.50} 这看起来很丑,可能有更好的写法,但是这样行吗?
  • @thang 谢谢,这得到了在我的编译器中工作的原始答案。不过,我仍然很好奇如何将这 4 个对象存储在一个数组中。
  • @Jonathan 在你的 for 循环的参数中,什么是 i
【解决方案2】:

创建一个对象数组

    planet p[4];

给它赋值

p[0](2.0, -0.5, 0, -0.94, 0.65);
p[1](1.0, -0.6, -0.2, 1.86, 0.7);
p[2](1.0, 0.5, 1.0, -0.44, -1.40);
p[3](0.4, 0.6, 0.3, 1.15, -1.50);

然后循环使用 for(int j=0; j<4; ++j){ cout << p[j].getvx() << "\n"; }

【讨论】:

  • 谢谢,但是如何将来自 p0、p1、p2、p3 的信息存储在数组 p[4] 中?
  • 没有默认构造函数你不能做Planet p[4],你不能做p[0](2.0, -0.5, 0, -0.94, 0.65);没有运算符()
猜你喜欢
  • 1970-01-01
  • 2021-11-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-01
  • 2016-02-10
  • 2020-08-07
  • 1970-01-01
相关资源
最近更新 更多