Natknąłem się na quiz, który dotyczył deklaracji tablicowej o różnych rozmiarach. Pierwszą rzeczą, jaka przyszła mi do głowy, jest to, że będę musiał użyć dynamicznej alokacji z new
poleceniem, w następujący sposób:
while(T--) {
int N;
cin >> N;
int *array = new int[N];
// Do something with 'array'
delete[] array;
}
Widziałem jednak, że jedno z rozwiązań dopuszcza następujący przypadek:
while(T--) {
int N;
cin >> N;
int array[N];
// Do something with 'array'
}
Po krótkich badaniach przeczytałem, że g ++ pozwala na to, ale zastanawiało mnie, w jakich przypadkach konieczne jest użycie dynamicznego przydzielania? A może kompilator tłumaczy to jako alokację dynamiczną?
Funkcja usuwania jest włączona. Należy jednak pamiętać, że pytanie tutaj nie dotyczy wycieków pamięci.
new OBJ
bezpośrednie wywoływanie .
std::vector
zamiast tego (std::vector<int> array(N);
).