Вопрос C++, new и delete, почему называется динамическим, он же не растет и не уменьшается

Регистрация
18 Дек 2013
Сообщения
59
Репутация
0
Спасибо
0
Монет
0
Почему int *a = new int [2] динамический массив, он увеличится, если я присвою что-то второму элементу, которого нет? Или его плюс только в том, что его можно удалить?
 
Я удивлён, что почти все написали ХЗ чо... Ты не поймёшь полностью всю офигенность динамических массивов, пока не отойдёшь от понятия массива как такогого и придёшь к памяти с указателями... Там вообще куча фишек, и с оператором new и с указателями и многое другое... На пару статей хватит... Но самая такая очевидная и банальная в том, что размеры массива динамическоо ограничены тока памятью.
 
Да, это путаница понятий. Тут "динамически выделяемая память" или "динамически созданный массив". Называть это "динамическим массивом" неправильно, но так часто говорят. Даже в статье в Википедии есть эта путаница.
 
Плюс в том, что можно задавать размер массива не константой, а значением вычисляемымполучаемым при работе программы. А в плане "растягивания" массивы вообще не бывают динамическими (в нормальных компилируемых языках), для этого есть коллекции - в плюсах это std::vector и др. Кстати, их и лучше использовать (коллекции), для удобства + чтобы не появлялось иногда утечек памяти из-за того, что в каком-то случае забыли удалить.
 
a - вот указатель динамического (можно изменить) массива. То бишь указан только первый элемент, а сколько их там или даже NULL элемент с указателем =0 не известно. Ну и выделяется обычно в памяти.
 
Его плюс, что размер массива может быть определён в ходе выполнения программы. cout << "Введите длину массива "; unsigned n; cin >> n; int *a = new int[n]; Так тоже работает: cout << "Введите длину массива "; unsigned n; cin >> n; int *a = new int[4]; a[100] = 5; cout << a[100]; Но так делать нельзя. Можно куда - то не туда в памяти ткнуть. У меня 3 раза норм. запустилась программа, на 4 раз - выпала. Если вообще нужен массив с изменяющимся размером, то используй контейнер vector < T > v; На мой взгляд, он удобней массивов и функциональней. #include < vector > ... cout << "Введите длину массива "; unsigned n; cin >> n; vector < int > v(n); cout << "Заполните массив" << endl; for (auto &t : v) { cin >> t; } cout << "Полученный массив" << endl; for (auto t : v) { cout << t << " "; } cout << endl; Или так cout << "Введите длину массива "; unsigned n; cin >> n; vector < int > v; cout << "Заполните массив" << endl; for (unsigned u = 0; u < n; ++u) { int t; cin >> t; v.push_back(t); } cout << "Полученный массив" << endl; for (auto t : v) { cout << t << " "; } cout << endl;
 
Назад
Сверху