C ++ Динамічне розподіл масивів з прикладом

Зміст:

Anonim

Що таке динамічний масив?

Динамічний масив дуже схожий на звичайний масив, але його розмір можна змінювати під час виконання програми. Елементи DynamArray займають суцільний блок пам'яті.

Після створення масиву його розмір змінювати не можна. Однак динамічний масив відрізняється. Динамічний масив може розширити свій розмір навіть після заповнення.

Під час створення масиву йому виділяється заздалегідь визначений обсяг пам'яті. Це не так у випадку з динамічним масивом, оскільки він збільшує обсяг пам'яті на певний коефіцієнт, коли є необхідність.

У цьому підручнику з C ++ ви дізнаєтесь

  • Що таке динамічний масив?
  • Фактори, що впливають на продуктивність динамічних масивів
  • Нове ключове слово
  • Ініціалізація динамічно виділених масивів
  • Зміна розміру масивів
  • Динамічне видалення масивів

Фактори, що впливають на продуктивність динамічних масивів

Початковий розмір масиву та його фактор зростання визначають його ефективність. Зверніть увагу на такі моменти:

  1. Якщо масив має невеликий розмір і малий коефіцієнт зростання, він буде частіше перерозподіляти пам’ять. Це зменшить продуктивність масиву.
  2. Якщо масив має великий розмір і великий фактор зростання, він матиме величезну кількість невикористаної пам'яті. Через це операції зі змінення розміру можуть зайняти більше часу. Це зменшить продуктивність масиву.

Нове ключове слово

У C ++ ми можемо створити динамічний масив, використовуючи нове ключове слово. Кількість елементів, які слід виділити, вказується в парі квадратних дужок. Ім'я типу має передувати цьому. Буде виділено необхідну кількість предметів.

Синтаксис:

Нове ключове слово приймає такий синтаксис:

pointer_variable = new data_type;

Покажчик_змінна - це назва змінної покажчика.

Тип_даних повинен бути дійсним типом даних C ++.

Потім ключове слово повертає покажчик на перший елемент. Після створення динамічного масиву ми можемо видалити його за допомогою ключового слова delete.

Приклад 1:

#includeusing namespace std;int main() {int x, n;cout << "Enter the number of items: << "\n";cin >>n;int *arr = new int(n);cout << "Enter " << n << " items" << endl;for (x = 0; x < n; x++) {cin >> arr[x];}cout << "You entered: ";for (x = 0; x < n; x++) {cout << arr[x] << " ";}return 0;}

Вихід:

Ось скріншот коду:

Пояснення коду:

  1. Включіть файл заголовка iostream до нашої програми, щоб використовувати його функції.
  2. Включіть у нашу програму простір імен std, щоб використовувати її класи, не викликаючи її.
  3. Виклик функції main (). Логіку програми слід додати в тілі функції.
  4. Оголосіть дві цілочисельні змінні x і n.
  5. Роздрукуйте на консолі текст, що запропонує користувачеві ввести значення змінної n.
  6. Зчитуйте введені користувачем дані з клавіатури та присвоюючи їх змінній n.
  7. Оголосіть масив, який міститиме загалом n цілих чисел, і призначте його покажчику змінної * arr.
  8. Роздрукуйте повідомлення, яке запропонує користувачеві ввести n кількість елементів.
  9. Використовуйте цикл for, щоб створити змінну циклу x для перебору елементів, введених користувачем.
  10. Прочитайте введені користувачем елементи та збережіть їх у масиві arr.
  11. Кінець тіла циклу for.
  12. Роздрукуйте текст на консолі.
  13. Використовуйте цикл for, щоб створити змінну циклу x для ітерації над елементами масиву.
  14. Виведіть на консоль значення, що містяться в масиві з іменем arr.
  15. Кінець тіла циклу for.
  16. Після успішного завершення програма повинна повертати значення.
  17. Кінець тіла основної () функції.

ПРИМІТКА. У наведеному вище прикладі користувачеві дозволяється вказувати будь-який розмір масиву під час роботи. Це означає, що розмір масиву визначається під час виконання .

Ініціалізація динамічно виділених масивів

Легко ініціалізувати динамічний масив до 0.

Синтаксис:

int *array{ new int[length]{} };

У наведеному вище синтаксисі довжина позначає кількість елементів, що додаються до масиву. Оскільки нам потрібно ініціалізувати масив до 0, це слід залишити порожнім.

Ми можемо ініціалізувати динамічний масив за допомогою списку ініціалізаторів. Давайте створимо приклад, який це демонструє.

Приклад 2:

#include using namespace std;int main(void) {int x;int *array{ new int[5]{ 10, 7, 15, 3, 11 } };cout << "Array elements: " << endl;for (x = 0; x < 5; x++) {cout << array[x] << endl;}return 0;}

Вихід:

Ось скріншот коду:

Пояснення коду:

  1. Включіть файл заголовка iostream до нашої програми, щоб використовувати його функції.
  2. Включіть простір імен std у нашу програму, щоб використовувати його класи, не викликаючи його.
  3. Виклик функції main (). Логіку програми слід додати в тілі функції.
  4. Оголосіть цілочисельну змінну з іменем x.
  5. Оголосіть динамічний масив з іменем масив за допомогою списку ініціалізаторів. Масив міститиме 5 цілочисельних елементів. Зверніть увагу, що ми не використовували оператор між довжиною масиву та списком ініціалізатора.
  6. Роздрукуйте текст на консолі. Endl - це ключове слово C ++, яке означає кінцевий рядок. Він переміщує курсор до наступного речення.
  7. Використовуйте цикл for для перебору елементів масиву.
  8. Надрукуйте вміст масиву з іменем array на консолі.
  9. Кінець тіла циклу for.
  10. Після успішного завершення програма повинна повертати значення.
  11. Кінець тіла основної () функції.

Зміна розміру масивів

Довжина динамічного масиву встановлюється протягом часу розподілу.

Однак C ++ не має вбудованого механізму зміни розміру масиву після його виділення.

Однак ви можете подолати цю проблему, динамічно розподіляючи новий масив, копіюючи елементи та стираючи старий масив.

Зверніть увагу: що ця техніка схильна до помилок, отже, намагайтеся уникати її.

Динамічне видалення масивів

Динамічний масив слід видалити з пам’яті комп’ютера після того, як його ціль виконана. Оператор delete може допомогти вам досягти цього. Потім звільнений простір пам'яті можна використовувати для зберігання іншого набору даних. Однак, навіть якщо ви не видалите динамічний масив із пам'яті комп'ютера, він буде видалений автоматично після завершення роботи програми.

Примітка:

Щоб видалити динамічний масив із пам'яті комп'ютера, замість видалення слід використовувати delete []. [] Вказує центральному процесору видаляти кілька змінних, а не одну змінну. Використання видалення замість видалення [] при роботі з динамічним масивом може призвести до проблем. Прикладами таких проблем є витоки пам'яті, пошкодження даних, збої тощо.

Приклад 3:

#includeusing namespace std;int main() {int x, n;cout << "How many numbers will you type?" << "\n";cin >>n;int *arr = new int(n);cout << "Enter " << n << " numbers" << endl;for (x = 0; x < n; x++) {cin >> arr[x];}cout << "You typed: ";for (x = 0; x < n; x++) {cout << arr[x] << " ";}cout << endl;delete [] arr;return 0;}

Вихід:

Ось скріншот коду:

Пояснення коду:

  1. Включіть у нашу програму файл заголовка iostream, щоб використовувати його функції.
  2. Включіть у нашу програму простір імен std, щоб використовувати її класи, не викликаючи її.
  3. Виклик функції main (). Логіку програми слід додати в тілі функції.
  4. Оголосіть дві змінні x та n цілочисельного типу даних.
  5. Роздрукуйте текст на консолі. Текст попросить користувача вказати кількість цифр, які вони будуть вводити.
  6. Зчитайте введення даних користувача з клавіатури. Вхідне значення буде присвоєно змінній n.
  7. Оголосіть змінну покажчика * обр. Масив arr зарезервує трохи пам'яті для зберігання загальної кількості n цілих чисел.
  8. Роздрукуйте на консолі повідомлення, що пропонує користувачеві ввести n чисел.
  9. Створіть цикл for та змінну циклу x, щоб перебирати числа, введені користувачем.
  10. Прочитайте введені користувачем цифри та збережіть їх у масиві arr.
  11. Кінець тіла циклу for.
  12. Роздрукуйте текст на консолі.
  13. Використовуйте цикл for та змінну циклу x для перебору вмісту масиву arr.
  14. Роздрукуйте значення масиву arr на консолі.
  15. Кінець тіла циклу for.
  16. Роздрукуйте порожній рядок на консолі.
  17. Звільніть пам'ять масиву arr.
  18. Програма поверне значення після успішного завершення.
  19. Кінець тіла основної () функції.

Короткий зміст:

  • Звичайні масиви мають фіксований розмір. Ви не можете змінити їх розмір після оголошення.
  • Для цих типів масивів обсяг пам'яті визначається під час компіляції.
  • Динамічні масиви різні. Їх розміри можна змінювати під час роботи.
  • У динамічних масивах розмір визначається під час виконання.
  • Динамічні масиви в C ++ оголошуються за допомогою нового ключового слова.
  • Ми використовуємо квадратні дужки, щоб вказати кількість елементів, які слід зберігати в динамічному масиві.
  • Закінчивши роботу з масивом, ми можемо звільнити пам’ять за допомогою оператора delete.
  • Використовуйте оператор delete за допомогою [], щоб звільнити пам’ять усіх елементів масиву.
  • Видалення без [] звільняє пам’ять лише одного елемента.
  • Немає вбудованого механізму зміни розміру масивів C ++.
  • Для ініціалізації масиву за допомогою ініціалізатора списку ми не використовуємо оператор .