Я понял, что в С++ я не могу инициализировать массив double
с помощью memset
. Для целочисленного массива я могу легко инициализировать массив, используя:
int* a = new int[n];
memset(a, n*n, n*sizeof(int));
Но как я могу инициализировать массив двойников в С++?
long double* d = new long double[n];
memset(d, n*n, n*sizeof(long double)); // does not work
std::fill
- person Nemo   schedule 02.10.2014auto x = new T[N]{};
тем не менее, это хорошо, только если вы хотите инициализировать нулями... - person Deduplicator   schedule 02.10.2014std::arrray
, используется ли он для моих массивов в стиле c? - person orezvani   schedule 02.10.2014std::fill
будет работать с любым итерируемым контейнером. Так чтоstd::fill(d, d+n, n*n)
должен делать то, что вы хотите - person Nemo   schedule 02.10.2014new double[n]{42}
. - person 5gon12eder   schedule 02.10.2014std::fill
существует с C++98 с той же семантикой. И большинство компиляторов оптимизируют его довольно хорошо. - person Nemo   schedule 02.10.2014std::fill
был в стандарте C++ с тех пор, как исходный стандарт был ратифицирован в 1998 году. Если вам кажется, что вам нужен C++11, вы делаете что-то не так ... Например, вы не забыли#include <algorithm>
? Если вы можете опубликовать короткую тестовую программу в другом вопросе, который не работает, кто-нибудь обязательно поможет вам это исправить. - person Nemo   schedule 04.10.2014