2016-01-23 142 views
3

的阵列创建基本类型的阵列当诸如:初始化基本类型

double *aPtr = new double[10]; 

是否有它初始化为特定值的方法吗? ((ex)-1)

创建一个新类是唯一的方法吗?

+2

你的意思是,用特定的相同值初始化数组中的每一个double? – Isuka

+0

是的,先生。这是真的Isuka。 – mintbox

+3

为什么不'std :: vector'? – leemes

回答

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

如果u要初始化双和设定值的阵列,以0 u可以使用:

double* aPtr = (double*)calloc(10,sizeof(double));

如果u想decleration后元件的设定值u可以使用:

double *aPtr = new double[10]; memset(aPtr,value,size);

同样的问题和你的回答详细:

using memset in double type array

+1

问题是在行星C++而不是C –

+1

或'double * aPtr = new double [10]();' –

+0

c&C++ dosn't有内存分配的缺陷,在使用'calloc'后你可以调用aPtr [1 ] = 10.对于C++我链接到一个答案 –

2

可以使用std::fill_n

std::fill_n(aPtr , 10, -1); 
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::fill,std::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; }); 

如果编译器不支持初始化捕获例如,您可以

std::generate(aPtr, aPtr + 10, [=]{ return ex - 1; }); 
+0

我*认为*当OP写“ex -1”他的意思是“例如,-1” - 我可能是错误的,但... –

+0

@PaulR我认为这不是非常重要。:) –

+0

正确 - 我只是认为这对读者来说可能有点困惑。 –

1

您可以使用统一的初始化初始化基本类型为零写。

double *aPtr = new double[10] {} 

这将零出创建的数组。您也可以使用“()”而不是“{}”在C++ 03中执行此操作。

但是,这不会将所有元素初始化为特定值。如果你写new double[10] {-1.0}你会得到一个阵列,第一个元素是-1.0和其他九个 - 0.0

您可以使用类似这样的初始化程序列表指定所有元素,但对于大型数组不可伸缩。相反,我相信在致电new后使用std::fill_nstd::fill是更好更简单的解决方案。

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