用现代C ++ STL数据结构替换旧的C样式数组

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正确初始化粒子?我当前的方法不起作用,并且编译器引发许多错误。如何正确执行?

Vla*_*cow 6

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作为结构的枚举数或作为结构的静态数据成员/