2012-04-24 32 views
20

我需要動態地創建一個整數數組。我發現,使用靜態數組的語法時動態數組的C++初始值

int a [5]={0}; 

正確初始化所有元素爲0

值是有辦法創造一個動態數組像

在做類似的事情
int* a = new int[size]; 

而不必遍歷數組的所有元素?或者可能爲for循環賦值仍然是最佳途徑? 感謝

+2

你的意思是'新INT [大小]'? – kennytm 2012-04-24 09:01:23

+2

你不能使用'std :: vector'嗎?這將初始化所有值爲零(或您選擇的任何其他值) – Nick 2012-04-24 09:02:40

+0

@KennyTM編輯錯字,對不起 – Arno 2012-04-24 09:03:13

回答

30

當然,只要使用()的值初始化:

int* ptr = new int[size](); 

(取自this answer到我以前密切相關的問題)

+1

@shartptooth我試過了,並得到一個錯誤:錯誤:ISO C++禁止初始化在數組新[[-fpermissive] – Arno 2012-04-24 09:09:21

+0

@Arno應該編譯。你使用什麼編譯器? – juanchopanza 2012-04-24 09:12:18

+0

@juanchopanza eclipse中的GCC g ++編譯器cdt – Arno 2012-04-24 09:13:39

4

我會怎麼做:

int* a = new int[size]; 
memset(a, 0, size*sizeof(int)); 
+0

完美地工作,謝謝! – Arno 2012-04-24 09:05:37

+6

@Arno正確的方法是銳利的答案。 – 2012-04-24 09:05:48

+1

'無需循環遍歷數組的所有元素' - 是不是有效地用'memset'做了什麼?儘管memset無疑會被機器優化。 – 2012-04-24 09:09:37

4

我建議你使用std::vector<int>std::array<int,5>

2

值初始化()

實施例中的元素:

int *p = new int[10];  // block of ten uninitialized ints 
int *p2 = new int[10](); // block of ten ints value initialized to 0 
2

要使用除0以外的值初始化,

爲指針數組:

int size = 10; 
int initVal = 47; 
int *ptrArr = new int[size]; 
std::fill_n(ptrArr, size, initVal); 
std::cout << *(ptrArr + 4) << std::endl; 
std::cout << ptrArr[4] << std::endl; 

對於非指針數組

int size = 10; 
int initVal = 47; 
int arr[size]; 
std::fill_n(arr, size, initVal); 

適用於任何DataType!

!要小心,一些編譯器可能不會抱怨訪問值超出數組的範圍可能返回一個非零值