Я наивно думал, что могу использовать memset для этого, но, по-видимому, memset предназначен только для символов. Есть ли тип memset-типа, который будет работать с массивом поплавков? Или простая итерация - самый быстрый способ скопировать одно значение в каждое место в массиве?
С++ - самый быстрый способ установки массива поплавков на одно и то же значение
Ответ 1
Я не буду говорить, какой код работает быстрее всего. Вы должны сравнить их самостоятельно, в предполагаемой среде.
Но вот два читаемых, поддерживаемых, правильных решения.
std::fill(std::begin(array), std::end(array), 3.14);
Или, если у вас есть динамический массив:
std::fill(array, array+size, 3.14);
Ответ 2
Стандартный способ:
std::fill(float_array, float_array + array_size, 0.0f);
Я подозреваю, что вы можете обыграть это стандартное средство без нестандартных методов.
Ответ 3
Я бы порекомендовал std::fill
.
std::fill(
floatArray + 0, floatArray + LENGTH
, newValue
);
Компилятор знает, что вы пытаетесь сделать здесь, и достойные реализации могут обеспечить соответствующие оптимизации.
Ответ 4
Вам просто нужно выполнить цикл и установить все значения в 0 (что и есть memset
):
// this is a generic function to set all the elements of an array of any type (that has a public assignment operator and copy constructor) to a specific value
template<typename T>
void setarray(T* array, const T val, unsigned int array_size) {
for (unsigned int i = 0; i < array_size; ++i)
array[i] = val;
}
float* floatArray = new float[x];
setarray(floatArray, 0, x);
Если конкретное значение, которое вы хотите установить для всех элементов массива, будет 0, и вы используете массив времени компиляции, вы можете использовать список инициализации:
float myArray[CONSTANT] = {}; // all values are 0
Ответ 5
Существует функция memfill
http://manpages.ubuntu.com/manpages/natty/man3/memfill.3pub.html
в публичной нестандартной библиотеке. Его можно использовать в ubuntu.
#include <publib.h>
float a=4.4;
memfill(buf_ptr, buf_size, &a, sizeof(float) );
Ответ 6
Вы можете использовать потоки и инициализировать поддиапазоны отдельными потоками.