new std::vector<Particle> [n]
динамически распределяет массив из n
пустых векторов и создает указатель на первый.
Это не то же самое, что вектор с n
элементами.
Вы должныиспользуйте список инициализаторов:
Nbody::Nbody(unsigned int n_, double dt_, double t_max_)
: n{n_}, dt{dt_}, t_max{t_max_}, p{n_}
{
// Empty.
}
Предполагая, что n
отслеживает количество частиц, вы можете избавиться от него и использовать вместо него p.size()
.
Инициализация самих частиц должнабыть добавленным к Particle
.
struct Particle{
double mass = 0.0;
double position[DIM] = {};
double velocity[DIM] = {};
double force[DIM] = {};
};
или
struct Particle{
double mass = 0.0;
std::array<double, DIM> position;
std::array<double, DIM> velocity;
std::array<double, DIM> force;
};