Sam*_*uel 1 c++ initialization vector construct stdarray
我为C ++中的n体仿真实现了一个简单的类。但是,该类使用了许多旧的C样式数组,我希望将其替换为STL提供的数据结构。
这是我要改进的代码的相关部分:
struct Particle{
double m; // mass
double x[DIM]; // position
double v[DIM]; // velocity
double F[DIM]; // force
};
class Nbody {
private:
const unsigned int n; // number of particles
const double dt; // step size
const double t_max; // max simulation time
std::vector<Particle> p;
public:
~Nbody(){};
Nbody(unsigned int n_, double dt_, double t_max_);
};
Nbody::Nbody(unsigned int n_, double dt_, double t_max_)
: n{n_}, dt{dt_}, t_max{t_max_} {
p = new std::vector<Particle> [n];
}
Run Code Online (Sandbox Code Playgroud)
我尝试使用std::vector<Particle>。但是在这种情况下,如何n正确初始化粒子?我当前的方法不起作用,并且编译器引发许多错误。如何正确执行?
p不是指针。p被声明为向量。
像这样重写构造函数定义
Nbody::Nbody(unsigned int n_, double dt_, double t_max_)
: n{n_}, dt{dt_}, t_max{t_max_}, p( n_ ) {
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,矢量p被初始化为具有n个元素的矢量,这些元素已被值初始化。
同样,在结构的定义中,Particle您可以将数组替换为类型的对象std::array<double, DIM>。另外,最好将该常数DIM作为结构的枚举数或作为结构的静态数据成员/