2016-01-23 188 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是更好更簡單的解決方案。

如果你真的不想有循環(即使在算法中),你可以使用可變參數模板來生成一個初始化列表,但這需要一些工作才能使它正常工作。