Да.
Сначала ... начните с внутреннего цикла.
"new float [2]"
Это выделяет массив, который, я думаю, медленнеевыделить объект фиксированного размера, который имеет 2 числа с плавающей точкой.
struct Float2D {float a;плавать б;};
x = новый Float2D;
, который кажется лучше.
Но действительно, забудьте все это.Если ты хочешь это быстро ... просто выдели кучу поплавков.
Я бы сказал ... пусть некоторые поплавки пропадут.Просто выделите старый простой 2D-массив.
float * f = (float *) malloc (max_number_of_particles * max_number_of_particles * 2 * sizeof (float));
Единственный размер, который вы можете сохранитьэто 2-кратное сохранение размера с использованием треугольника вместо квадрата.
Тем не менее, я чертовски уверен, что вы уже УБИЛИ все это «сохранение размера», используя «new float [2]»,и "new float * [i];".Я не уверен, сколько стоит «new», но я думаю, что это похоже на malloc, только хуже.И я думаю, что большинство malloc имеет около 8 байтов на распределение.
Итак, у вас уже есть МЕДШЕЕ, чем размер 2X, потерянный при выделении квадрата.
Кроме того, это упрощает математику.Вам нужно сделать какую-нибудь странную математику «Треугольное число», чтобы получить указатель.Что-то вроде (n + 1) * n / 2 или что-то еще:)