初始化基本类型的数组

时间:2016-01-23 10:28:57

标签: c++ types initialization

创建基本类型的数组时,例如:

double *aPtr = new double[10];

有没有办法将其初始化为特定值? ((前)-1)

创建新课程是唯一的方法吗?

5 个答案:

答案 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::fillnew是一种更好,更简单的解决方案。

如果你真的想要没有循环(甚至在算法中),你可以使用可变参数模板生成初始化列表,但这需要一些工作才能使它正常工作。

答案 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::generatestd::generate_nstd::fillstd::fill_nstd::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);

同样的问题,你的答案详细说明:

using memset in double type array