2012-03-07 10 views
19

chcę zainicjować tablicę w formacie, który używa przecinków do rozdzielenia elementów otoczona w nawiasach klamrowych np:Zastosowanie nowego operatora zainicjować tablicę

int array[10]={1,2,3,4,5,6,7,8,9,10}; 

Jednak muszę użyć nowego operatora przeznaczyć EG pamięci:

int *array = new int[10]; 

Czy istnieje sposób, aby połączyć tezy metod, aby można było przydzielić pamięci za pomocą nowego operatora i zainicjalizować tablicę z klamrami?

+6

Tablica nie jest wskaźnikiem. –

+0

Co masz na myśli "potrzeba"? –

Odpowiedz

16

Możesz użyć memcpy po przydzieleniu.

int originalArray[] ={1,2,3,4,5,6,7,8,9,10}; 
int *array = new int[10]; 
memcpy(array, originalArray, 10*sizeof(int)); 

Nie jestem świadomy żadnej składni, która pozwala to zrobić automagicznie.

Znacznie później edit:

const int *array = new int[10]{1,2,3,4,5,6,7,8,9,10}; 
+3

Lub równoważnie, 'std :: copy (originalArray, originalArray + 10, array)', nie ma wiele do wyboru między nimi. W C++ 11 możesz zrobić 'std :: end (originalArray)' zamiast 'originalArray + 10'. –

+0

@SteveJessop Czy to oznacza, że ​​tablica zawiera informacje o rozmiarze w C++ 11? –

+0

Typ tablicy zawiera rozmiar, taki sam jak w C++ 03. 'std :: end' specjalizuje się w tablicach, ze starym' T * end (T (& ra) [N]) {return ra + N; } 'trick. Nie ma nowych informacji przechowywanych dla dostępu do środowiska wykonawczego, i nie działałoby, gdyby wskaźnik 'originalArray' był wskaźnikiem. –

34

w nowym standardzie C++ (C++ 11), można to zrobić:

int* a = new int[10] { 1,2,3,4,5,6,7,8,9,10 }; 

Nazywa listę initializer. Ale w poprzednich wersjach normy, które nie były możliwe.

Właściwe odniesienie online z dalszymi szczegółami (i bardzo trudne do odczytania) to here. Próbowałem również używając GCC i opcji --std=c++0x i potwierdziłem, że rzeczywiście działa.

+2

+1 Nie sądzę, że op ma kompilator zgodny z C++ 11, w przeciwnym razie zaakceptowałbym tę odpowiedź. –

+0

@LuchianGrigore To jest w porządku ... I rzeczywiście, zgodnie z [matrycą pomocy C++ 11] (https://wiki.apache.org/stdcxx/C%2B%2B0xCompilerSupport), GCC wydaje się być jedynym głównym kompilatorem do tej pory obsługujący listy inicjalizatorów. – jogojapan

Powiązane problemy