Массивы в C++: учимся использовать в своих программах
Всем привет! В данном уроке мы рассмотрим чрезвычайно популярную структуру хранения данных - массивы. Массивы вы можете встретить в любом языке программирования, поскольку без них хранение данных было бы очень тяжелой задачей. Давай начнем!
Что такое массив?
Массив - это набор однотипных данных. Например, вы можете хранить все носки в одном месте. Для этого вы используете полку. В C++ множество элементов хранятся в массивах.
Для лучшего понимания давайте рассмотрим следующею картинку:
По ней мы можем понять следующее:
- Каждый массив должен иметь свое название.
- Он может в себе содержать от одного элемента до бесконечности (это в теории, на практике размер массива ограничивается памятью компьютера).
- Все элементы должны быть одного типа. Так, например, вы не можете в одном массиве хранить переменные типа
int
и типаdouble
.
Теперь, когда вы понимаете концепцию массива, мы можем перейти к его реализацией на C++.
Используем массивы в C++
В C++ с массивами довольно легко работать (поскольку массивы содержат много однотипных значений, для их обработки удобно использовать цикл for). Давайте научимся это делать с объявления массива.
Инициализация массива
Для того чтобы использовать массивы в своих программах, его надо сначала объявить. Для этого нужно использовать следующею конструкцию:
<тип> <имя массива> [ <кол-во элементов > ];
Например:
int arr[50];
Этим кодом мы создали массив типа int
с именем arr
в котором может храниться до 50-ти элементов.
Также можно использовать и другие типы:
float myTestArrayForLesson[10 * 1000 + 1];
Данный код также абсолютно корректен. Давайте также рассмотрим способ указания значения элементам массива при его инициализации:
int arr[] = {0, 1, 2, 3, 4, 5}; // массив будет иметь 6 элементов (от 0 до 5)
int mas[100] = {0}; // все 100 элементов будут иметь значение 0
Как видите, для того, чтобы задать значения, нужно сразу после объявления массива указать через равно в фигурных скобках требуемые значения.
Теперь давайте разберемся в том, как же нам в своих программах использовать данные в массиве.
Обращение к элементам массива
Очень важный момент! В C++ нумерация элементов массива идет с нуля. Таким образом второй элемент будет иметь индекс 1, а десятый - 9. к сожалению, многие новички забывают про это.
Вообще, есть возможность работать без нулевого элемента. Для этого в программе придется всегда следить за нужной нумерацией элементов в массиве. Так, например, вы не сможете задавать различные значение элементов по порядку (как мы это сделали вверху). Для этого вам придется для нулевого элемента указывать, например, -1.
Для начала, давайте научимся присваивать элементам массива требуемые нам значения. Для этого достаточно указать имя массива и номер требуемого элемента, а затем после знака равенства указать присваиваемое значение:
arr[6] = 7 * 4; // arr[6] равен 28
Для обращения к элементу массива в C++ мы должны использовать следующею конструкцию:
<любой код> <имя массива> [ <№ элемента> ] <любой код>
Это может выглядеть следующим образом:
cout << arr[10] << ", " << arr[11] << endl;
Таким образом мы выводим на экран значения одиннадцатого и двенадцатого элементов.
Двухмерные массивы
Очень часто при решении практических задач возникает потребность в использовании таблиц, матриц и т. д. В таком случае нам может пригодится отличная модификации массива - двухмерные (и более) массивы. Для этого нам просто нужно объявить массив массивов. Делается это следующим образом:
int arr[100][50] = {0}; // двухмерный массив
Этим кодом мы создали матрицу размером 100x50, которая изначально заполнена нулями. Ее использование ничуть не отличается от выше рассмотренных обычных массивов:
int matrix[100][100] = {0};
matrix[5][10] = 11;
matrix[10][5] = 1;
cout << "Interesting values:\n";
cout << matrix[0][0] << ", " << matrix[5][10] << ", " << matrix[10][5] << endl;
Если мы выполним такой код (предварительно обернув его в функцию main), то увидим следующее:
Interesting values:
0, 11, 1
Process returned 0 (0x0) execution time : 0.020 s
Press any key to continue.
Как видите работать с двухмерными массивами также просто как и с их одномерными аналогами. Теперь давайте напишем простенькую программу, которая будет использовать массивы.
Пример
А реализовывать мы будем хранилище данных. Изначально оно будет пустое (содержать нули). Пользователь сможет записывать в нее значения и извлекать при необходимости (пользователь будет указывать номер дома и квартиры человека, а хранить мы будем его возраст).
Вот код данной программы:
#include <iostream>
#include <stdlib.h>
using namespace std;
int main() {
int data[500][500] = {0}; // массив
string type; // тип запроса
int x, y, val;
while (true) { // бесконечный цикл
cin >> type; // узнаем тип запроса
if (type == "End") { // если End, то завершаем работу
break;
} else if (type == "Insert") { // вставка
cin >> x >> y >> val;
data[x][y] = val;
} else if (type == "Delete") { // удаление
cin >> x >> y;
data[x][y] = 0;
} else if (type == "Get") { // получение значения
cin >> x >> y;
cout << data[x][y] << endl;
} else { // что-то пошло не так
cout << "Error! Let's try again." << endl;
}
}
cout << "\nOk. Good work." << endl;
return 0;
}
Вот пример работы данной программы:
Insert 1 1 4
Insert 5 4 2
Inser
Error! Let's try again.
Get 1 2
0
Get 5 4
2
Get 1 1
4
Delete 1 1
Get 1 1
0
End
Ok. Good work.
Process returned 0 (0x0) execution time : 0.020 s
Press any key to continue.
Здесь были использованы двухмерные массивы в C++ для хранения данных. Если вы что-то не поняли, то можете оставить свой вопрос в комментариях (мы оперативно отвечаем:-) ).
Чтобы вы лучше усвоили урок, расширьте функционал данной программы следующим образом:
- Добавьте возможность узнать, живет ли в данной квартире кто-нибудь или нет (подсказка: заведите массив типа bool).
- Установите ограничения на x и y. Сейчас программа не будет работать при
x >= 500
. Для решения этой проблемы выводите пользователю сообщение при попытке добавить элемент с некорректными значениями x или y.
Если вы хотите отблагодарить автора за проделанную работу, то поделитесь данной информацией с помощью кнопок ниже.
Спасибо за внимание!
Если хотите всегда быть в курсе последних новостей в мире программирования и IT, подписываетесь на мой Telegram-канал, где я делюсь свежими статьями, новостями и полезными советами. Буду рад видеть вас среди подписчиков!
Обсуждение