2012-04-24 18 views
20

Potrzebuję dynamicznie tworzyć tablicę liczb całkowitych. Odkryłam, że przy użyciu statycznej tablicę składnięWartość początkowa dynamicznej tablicy C++

int a [5]={0}; 

prawidłowo inicjalizuje wartość wszystkich elementów 0.

Czy istnieje sposób, aby zrobić coś podobnego podczas tworzenia dynamicznej tablicy jak

int* a = new int[size]; 

bez pętli nad wszystkimi elementami tablicy? A może przypisanie wartości za pomocą pętli for jest nadal optymalnym sposobem na przejście? Dzięki

+2

chodziło Ci 'new int [size]'? – kennytm

+2

Nie możesz użyć 'std :: vector'? To zainicjuje wszystkie wartości do zera (lub dowolną inną wybraną przez ciebie wartość) – Nick

+0

@KennyTM edytuj literówkę, przepraszam – Arno

Odpowiedz

30

Jasne, wystarczy użyć () dla wartości inicjalizacji:

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

(zaczerpnięte z this answer do mojego wcześniejszego ściśle powiązanego pytania)

+1

@shartptooth Próbowałem tego i otrzymałem komunikat o błędzie: error: ISO C++ zabrania inicjowania w tablicy new [-fpermissive] – Arno

+0

@Arno, które powinno się skompilować. Z jakiego kompilatora korzystasz? – juanchopanza

+0

@juanchopanza GCC kompilator g ++ wewnątrz eclipse cdt – Arno

4

zrobiłbym:

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

działa idealnie, dziękuję! – Arno

+6

@Arno Właściwa droga to odpowiedź Sharptooth. –

+1

"bez pętli nad wszystkimi elementami tablicy" - Czy to nie jest skuteczne, co robisz z 'memset'? Chociaż ten zestaw bez wątpienia będzie zoptymalizowany pod kątem maszyny. –

4

radzę ci używać std::vector<int> lub std::array<int,5>

2

Wartość zainicjować elementy z ()

Przykład:

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

można zainicjować z innymi wartościami niż 0

do tablicy wskaźnik:

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; 

for Non tablicy wskaźnik

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

Działa całkiem dobrze dla każdego DataType!

! Bądź ostrożny, niektóre kompilatory mogą nie skarżą dostępu wartość poza zakresem tablicy, która może powrócić niezerową wartość

Powiązane problemy