创建基本类型的数组时,例如:
double *aPtr = new double[10];
有没有办法将其初始化为特定值? ((前)-1)
创建新课程是唯一的方法吗?
答案 0 :(得分:3)
fill_n函数可以是您正在寻找的。它将为数组的n个第一个值赋予特定值。
double *aPtr = new double[10];
std::fill_n(aPtr, 10, -1); // Fill the aPtr array with the value -1 for the 10 first values.
我不知道在声明时用一个相同的值直接填充它的具体方法。
答案 1 :(得分:2)
您可以使用std::fill_n:
std::fill_n(aPtr , 10, -1);
答案 2 :(得分:1)
您可以使用统一初始化将基本类型初始化为零。
double *aPtr = new double[10] {}
这会将创建的数组清零。您也可以使用"()"在C ++ 03中执行此操作。而不是" {}"。
但是,这不会将所有元素初始化为特定值。如果你写new double[10] {-1.0}
,你会得到一个数组,第一个元素为-1.0
,另外九个为0.0
。
您可以使用像这样的初始化程序列表指定所有元素,但它不适用于大型数组。相反,我认为在调用std::fill_n
之后使用std::fill
或new
是一种更好,更简单的解决方案。
如果你真的想要没有循环(甚至在算法中),你可以使用可变参数模板生成初始化列表,但这需要一些工作才能使它正常工作。
答案 3 :(得分:0)
对于这样的小型数组,您可以明确地编写
double *aPtr = new double[10]
{
ex -1, ex -1, ex -1, ex -1, ex -1, ex -1, ex -1, ex -1, ex -1, ex -1
};
但是对于更大的数组,您应该使用一些标准算法,例如std::generate
,std::generate_n
,std::fill
,std::fill_n
,std::for_each
甚至某种类型循环。
例如
std::generate( aPtr, aPtr + 10, [value = ex - 1]{ return value; } );
或
std::generate_n( aPtr, 10, [value = ex - 1]{ return value; } );
或
std::fill( aPtr, aPtr + 10, ex - 1 );
或
std::fill_n( aPtr, 10, ex - 1 );
或
std::for_each( aPtr, aPtr + 10, [value = ex - 1]( auto &x ){ x = value; } );
如果编译器不支持init捕获,您可以编写例如
std::generate( aPtr, aPtr + 10, [=]{ return ex - 1; } );
答案 4 :(得分:-1)
如果你想初始化double数组并将值设置为0,你可以使用:
double* aPtr = (double*)calloc(10,sizeof(double));
如果你想要在变换之后设置元素值,你可以使用:
double *aPtr = new double[10];
memset(aPtr,value,size);
同样的问题,你的答案详细说明: