簡體   English   中英

初始化基本類型的數組

[英]Initializing array of fundamental types

創建基本類型的數組時 ,例如:

double *aPtr = new double[10];

有沒有辦法將其初始化為特定值? ((前)-1)

創造新課程的唯一途徑是什么?

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.

我不知道在聲明時用一個相同的值直接填充它的具體方法。

你可以使用std :: fill_n

std::fill_n(aPtr , 10, -1);

您可以使用統一初始化將基本類型初始化為零。

double *aPtr = new double[10] {}

這將使創建的數組歸零。 您也可以使用“()”代替“{}”在C ++ 03中執行此操作。

但是,這不會將所有元素初始化為特定值。 如果你編寫new double[10] {-1.0}你會得到一個數組,第一個元素是-1.0 ,另外九個是0.0

您可以使用這樣的初始化程序列表指定所有元素,但它不適用於大型數組。 相反,我相信在調用new之后使用std::fill_nstd::fill是一種更好更簡單的解決方案。

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

對於這樣的小型數組,您可以明確寫入

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; } );

如果你想初始化double數組並將值設置為0,你可以使用:

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

如果你想要在decleration后設置元素值你可以使用:

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

同樣的問題和你的答案詳細:

在double類型數組中使用memset

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM