[英]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_n
或std::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::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; } );
如果你想初始化double數組並將值設置為0,你可以使用:
double* aPtr = (double*)calloc(10,sizeof(double));
如果你想要在decleration后設置元素值你可以使用:
double *aPtr = new double[10];
memset(aPtr,value,size);
同樣的問題和你的答案詳細:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.