Масиви в C++ | Оголосити | Ініціалізувати | Покажчик на приклади масиву
Що таке масив?
Масив — це структура даних, у якій послідовно зберігаються елементи одного типу даних. А C++ масив має фіксований розмір.
Масив можна розглядати як набір змінних подібного типу даних. Замість того, щоб оголошувати кожну змінну та присвоювати їй значення окремо, ви можете оголосити одну змінну (масив) і додати до неї значення різних змінних. Кожне значення, додане до масиву, ідентифікується індексом.
Для чого потрібні масиви?
Масиви дуже важливі в будь-якій мові програмування. Вони забезпечують більш зручний спосіб зберігання змінних або колекції даних подібного типу разом замість того, щоб зберігати їх окремо. Доступ до кожного значення масиву буде здійснюватися окремо.
Оголошення масиву в C++
Оголошення масиву в C++ передбачає визначення типу, а також кількості елементів, які будуть зберігатися в масиві. Синтаксис:
type array-Name [ array-Size ];
Правила оголошення одновимірного масиву в C++.
- Тип: Тип — це тип елементів, які будуть зберігатися в масиві, і він має бути дійсним C++ тип даних.
- Ім'я масиву: Ім'я масиву - це ім'я, яке буде призначено масиву.
- Розмір масиву: Розмір масиву — це кількість елементів, які будуть зберігатися в масиві. Воно має бути цілим числом і бути більшим за 0.
Наприклад, ви можете створити масив під назвою вік і зберегти вік 5 учнів таким чином:
int age[5];
Масив age зберігатиме 5 цілих чисел, що представляють вік різних учнів.
Ініціалізація масиву
Ініціалізація масиву — це процес призначення/збереження елементів масиву. Ініціалізацію можна виконати в одному операторі або по одному. Зауважте, що перший елемент у масиві зберігається під індексом 0, тоді як останній елемент зберігається під індексом n-1, де n – загальна кількість елементів у масиві.
У випадку вікового масиву перший елемент буде збережено під індексом 0, а останній елемент буде збережено під індексом 4.
Давайте використаємо масив age, щоб продемонструвати, як можна виконати ініціалізацію масиву:
int age[5] = {19, 18, 21, 20, 17};
Загальна кількість елементів у {} не може перевищувати значення, указане в []. Елемент 19 знаходиться в індексі 0, 18 в індексі 1, 21 в індексі 2, 20 в індексі 3 і 17 в індексі 4. Якщо ви не вкажете кількість елементів, які будуть зберігатися в масиві в межах [ ], масив буде достатньо великим, щоб умістити елементи, додані в { }. Наприклад:
int age[] = {19, 18, 21, 20, 17};
Наведений вище оператор створить точно такий же масив, як і попередній. Ви також можете призначити один елемент масиву, використовуючи його індекс. Наприклад:
age[3] = 20;
Наведений вище оператор зберігатиме значення 20 під індексом 3 масиву з іменем age. Це означає, що 20 буде 4th елемент масиву.
Типи масивів
Існують два види C++ масиви:
- Одновимірний масив
- Багатовимірний масив
- Покажчик на масив
Одновимірний масив
Це масив, у якому елементи даних розташовані лінійно лише в одному вимірі. Його зазвичай називають 1-D масивом. Синтаксис:
datatype array-name[size];
- Ім'я масиву - це ім'я масиву.
- Розмір — це кількість елементів, які будуть зберігатися в масиві.
Наприклад:
#include <iostream> using namespace std; int main() { int age[5] = { 19, 18, 21, 20, 17 }; for (int x = 0; x < 5; x++) { cout <<age[x]<<"\n"; } }
вихід:
Ось скріншот коду:
Пояснення коду:
- Включаючи файл заголовка iostream у наш код. Це дозволить нам читати з консолі та писати в неї.
- Включаючи простір імен std, щоб використовувати його класи та функції без його виклику.
- Виклик функції main(), всередину якої має бути додана логіка програми.
- Початок тіла функції main().
- Оголошення масиву з іменем age для зберігання 5 цілих чисел. 5 цілих чисел також були ініціалізовані.
- Створіть цілочисельну змінну x за допомогою циклу for.
- Початок тіла циклу for.
- Використання змінної циклу x для перебору значень вікового масиву та друку їх на консолі. «\n» є символом нового рядка і друкується в новому рядку після кожної ітерації.
- Кінець корпусу для петлі.
- Кінець тіла функції main().
Багатовимірний масив
Це масив, у якому елементи даних упорядковані, щоб утворити масив масивів. Багатовимірний масив може мати будь-яку кількість вимірів, але поширеними є двовимірні та тривимірні масиви. Синтаксис:
datatype array-name[d1][d2][d3]...[dn];
Ім'я масиву - це ім'я масиву, який матиме n розмірів. Наприклад:
Двовимірний масив
Двовимірний масив зберігає дані у списку з одновимірним масивом. Це матриця з рядками та стовпцями. Щоб оголосити 2D-масив, використовуйте такий синтаксис:
type array-Name [ x ][ y ];
Тип має бути дійсним C++ тип даних. Подивіться на 2D-масив як на таблицю, де x позначає кількість рядків, а y позначає кількість стовпців. Це означає, що ви ідентифікуєте кожен елемент у двовимірному масиві за допомогою форми a[x][y], де x — номер рядка, а y — кількість стовпців, до яких належить елемент.
Ось приклад того, як ініціалізувати 2D-масив:
int a[2][3] = { {0, 2, 1} , /* row at index 0 */ {4, 3, 7} , /* row at index 1 */ };
У наведеному вище прикладі ми маємо 2D-масив, який можна розглядати як матрицю 2×3. Є 2 рядки і 3 стовпці. Доступ до елемента 0 можна отримати як [0][1], оскільки він розташований на перетині рядка з індексом 0 і стовпця з індексом 1. Доступ до елемента 3 можна отримати як [1][2], оскільки він розташований на перетин рядка з індексом 1 і стовпця з індексом 2.
Зауважте, що ми просто додали фігурні дужки, щоб відрізнити різні ряди елементів. Ініціалізацію також можна було виконати наступним чином:
int a[2][3] = {0, 2, 1, 4, 3, 7}; };
Наступні C++ приклад демонструє, як ініціалізувати та пройти 2D-масив:
#include <iostream> using namespace std; int main() { // a 2x3 array int a[3][2] = { {0, 2}, {1, 4}, {3, 7} }; // traverse array elements for (int i=0; i<3; i++) for (int j=0; j<2; j++) { cout << "a[" <<i<< "][" <<j<< "]: "; cout << a[i][j] << endl; } return 0; }
вихід:
Ось скріншот коду вище:
Пояснення коду:
- Включаючи файл заголовка iostream у наш код. Це дозволить нам читати з консолі та писати в неї.
- Включаючи простір імен std, щоб використовувати його класи та функції без його виклику.
- Виклик функції main(), до якої слід додати код.
- Початок тіла функції main().
- коментар. The C++ компілятор пропустить це.
- Оголошення двовимірного масиву з 2 рядків і 3 стовпців. До масиву також додано елементи.
- коментар. The C++ компілятор пропустить це.
- Створення змінної i за допомогою циклу for. Ця змінна буде перебирати індекси рядків масиву.
- Створення змінної j за допомогою циклу for. Ця змінна буде перебирати індекси стовпців масиву.
- Початок тіла петель.
- Виведіть значення змінних i та j на консоль у квадратних дужках на консолі.
- Виведіть значення, що зберігається в індексі [i][j] масиву a.
- Кінець тіла петель.
- Функція main() має повертати ціле значення, якщо програма працює нормально.
- Кінець тіла функції main().
Тривимірний масив
Тривимірний масив — це масив масивів. Кожен елемент у тривимірному масиві ідентифікується набором із 3 індексів. Щоб отримати доступ до елементів тривимірного масиву, ми використовуємо три цикли for. Наприклад:
#include<iostream> using namespace std; void main() { int a[2][3][2] = {{{4, 8},{2, 4},{1, 6}}, {{3, 6},{5, 4},{9, 3}}}; cout << "a[0][1][0] = " << a[0][1][0] << "\n"; cout << "a[0][1][1] = " << a[0][1][1] << "\n"; }
вихід:
Ось скріншот коду:
Пояснення коду:
- Включаючи файл заголовка iostream у наш код. Це дозволить нам читати з консолі та писати в неї.
- Включаючи простір імен std, щоб використовувати його класи та функції без його виклику.
- Виклик функції main(), всередину якої має бути додана логіка програми.
- Початок тіла функції main().
- Оголошення 3D-масиву an розміром 2x3x2. Значення масиву також ініціалізовано.
- Доступ до елемента, що зберігається в індексі [0][1][0] масиву, і друк його на консолі.
- Доступ до елемента, що зберігається в індексі [0][1][1] масиву, і друк його на консолі.
- Кінець тіла функції main().
Покажчик на масив
A покажчик це змінна, яка містить адресу. Окрім використання покажчика для зберігання адреси змінної, ми можемо використовувати його для зберігання адреси комірки масиву. Ім'я масиву постійно вказує на його перший елемент. Розгляньте наведену нижче декларацію:
int age[5];
Вік — це покажчик на $age[0], адресу першого елемента масиву під назвою age. Розглянемо такий приклад:
#include <iostream> using namespace std; int main() { int *john; int age[5] = { 19, 18, 21, 20, 17 }; john = age; cout << john << "\n"; cout << *john; }
вихід:
Зауважте, що перше значення наведеного вище виведення може повертати інше значення залежно від адреси, призначеної першому елементу масиву в пам’яті вашого комп’ютера.
Ось скріншот коду:
Пояснення коду:
- Включаючи файл заголовка iostream у наш код. Це дозволить нам читати з консолі та писати в неї.
- Включаючи простір імен std, щоб використовувати його класи та функції без його виклику.
- Виклик функції main(), всередину якої має бути додана логіка програми.
- Початок тіла функції main().
- Оголошення змінної покажчика з іменем *john.
- Оголошення цілочисельного масиву з іменем age для зберігання 5 цілих чисел. Значення цілих чисел також були ініціалізовані.
- Присвоєння змінній john значення адреси елемента, що зберігається в першому індексі масиву age.
- Друк значення змінної john, яка є адресою елемента, що зберігається в першому індексі масиву age.
- Друк першого значення, збереженого в масиві age.
- Кінець тіла функції main().
Імена масивів можна використовувати як постійні покажчики, і навпаки. Це означає, що ви можете отримати доступ до значення, яке зберігається в індексі 3 масиву age за допомогою *(age + 3). Наприклад:
#include <iostream> using namespace std; int main() { // an array of 5 elements. int age[5] = { 19, 18, 21, 20, 17 }; int *p; p = age; // output array values cout << "Using pointer: " << endl; for (int x=0; x<5; x++) { cout << "*(p + " << x << ") : "; cout << *(p + x) << endl; } cout << "Using age as address: " << endl; for (int x = 0; x < 5; x++) { cout << "*(age + " << x << ") : "; cout << *(age + x) << endl; } return 0; }
вихід:
Ось скріншот коду:
Пояснення коду:
- Включаючи файл заголовка iostream у наш код. Це дозволить нам читати з консолі та писати в неї.
- Включаючи простір імен std, щоб використовувати його класи та функції без його виклику.
- Виклик функції main() і початок тіла функції main().
- коментар. The C++ компілятор пропустить це.
- Оголошення масиву з іменем age для зберігання 5 цілих чисел.
- Створення покажчика на ціле число с.
- Присвоєння p значення адреси першого елемента масиву age.
- коментар. The C++ компілятор пропустить це.
- Роздрукуйте текст на консолі.
- Створіть ціле число x за допомогою циклу for. { позначає початок тіла циклу for.
- Роздрукуйте значення x у поєднанні з іншим текстом на консолі.
- Виведіть на консоль значення *(p + x).
- Кінець тіла петлі for.
- Роздрукуйте текст на консолі.
- Створіть змінну x за допомогою циклу for. { позначає початок тіла циклу for.
- Роздрукуйте значення x від 0 до 4 разом з іншим текстом.
- Роздрукуйте значення *(вік + x).
- Кінець тіла циклу for.
- Значення, що повертається, якщо програма виконується успішно.
- Кінець тіла функції main().
Доступ до значень масиву
Доступ до елементів масиву здійснюється за допомогою відповідних індексів. Індекс елемента, до якого потрібно отримати доступ, додається в квадратних дужках [ ] відразу після імені масиву. Наприклад:
int john = age[2];
У наведеному вище прикладі ми просто стверджуємо, що вік Івана зберігається в індексі 2 масиву під назвою age. Це означає, що Іванові 3 рокиrd значення в масиві age. Ось повний C++ приклад, який показує, як отримати доступ і роздрукувати це значення:
#include<iostream> using namespace std; int main() { int age[5] = { 19, 18, 21, 20, 17 }; int john = age[2]; cout << "The age of John is:"<<john; }
вихід:
Ось скріншот коду:
Пояснення коду:
- Включаючи файл заголовка iostream у наш код. Це дозволить нам читати з консолі та писати в неї.
- Включаючи простір імен std, щоб використовувати його класи та функції без його виклику.
- Виклик функції main(), до якої слід додати код.
- Початок тіла функції main().
- Оголошення масиву з іменем age для зберігання 5 цілих елементів.
- Доступ до значення, що зберігається в індексі 2 масиву age, і збереження його значення у змінній з іменем john.
- Друк значення змінної john на консолі поряд з іншим текстом.
Переваги масиву в C++
Ось плюси/переваги використання Array в C++:
- Елементи масиву можна легко обійти.
- Легко маніпулювати масивами даних.
- До елементів масиву можна звертатися довільно.
- Масиви полегшують оптимізацію коду; отже, ми можемо виконувати багато роботи, використовуючи менше коду.
- Легко сортувати дані масиву.
Недоліки масиву в C++
- Масив має фіксований розмір; отже, ми не можемо додати до нього нові елементи після ініціалізації.
- Виділення більшої кількості пам’яті, ніж вимагається, призводить до втрати пам’яті, а менший обсяг пам’яті може створити проблему.
- Кількість елементів, які будуть зберігатися в масиві, повинна бути відома заздалегідь.
Підсумки
- Масив — це структура даних, яка зберігає елементи одного типу даних.
- Елементи масиву зберігаються послідовно.
- Елементи масиву позначаються за допомогою відповідних індексів. Перший елемент має індекс 0, а останній – індекс n-1, де є загальна кількість елементів масиву.
- Оголошення масиву передбачає визначення типів даних елементів масиву, а також кількості елементів, які будуть зберігатися в масиві.
- В одновимірному масиві елементи зберігаються послідовно.
- Двовимірний масив зберігає елементи в рядках і стовпцях.
- Тривимірний масив — це масив масивів.
- Елементи можна додавати до масиву за допомогою їх індексів.
- Доступ до елементів масиву здійснюється за допомогою їх індексів.
- Багатовимірний масив має більше одного виміру.
- Ім'я масиву вказує на його перший елемент.
- Масиви мають фіксований розмір, тобто нові елементи не можуть бути додані до масиву після його ініціалізації.