Массивы (списки) в C++17: подробное руководство
Массивы (списки) в C++
Что такое массив и зачем он нужен?
Представь, что ты записываешь оценки за неделю. Можно сделать так: int ocenka1 = 5, ocenka2 = 4, ocenka3 = 3;. Но что если у тебя 100 оценок? Придётся придумать 100 разных имён! Это неудобно.
Массив (или список) — это коробка с ячейками, в которой можно хранить много значений одного типа под одним именем. У каждой ячейки есть свой номер (индекс). Первая ячейка всегда имеет номер 0, вторая — 1 и так далее.
Пример из жизни: представь список покупок (молоко, хлеб, яблоки). В программировании мы можем хранить такой список в массиве строк.
Основной синтаксис
Объявление и инициализация
#include <iostream>
#include <string>
using namespace std;
int main() {
// Способ 1: объявить и сразу заполнить
int chisla[5] = {10, 20, 30, 40, 50};
// Способ 2: объявить пустой массив и заполнить потом
string frukty[3];
frukty[0] = "Яблоко";
frukty[1] = "Банан";
frukty[2] = "Груша";
// Способ 3: не указывать размер (компилятор сам посчитает)
double vysoty[] = {100.5, 200.0, 350.2};
return 0;
}
Как обращаться к элементам
Чтобы получить или изменить элемент, нужно написать имя массива и в квадратных скобках индекс:
#include <iostream>
using namespace std;
int main() {
int temp[4] = {25, 26, 23, 24};
// Читаем значение из ячейки с индексом 2 (третья по счёту)
cout << "Температура в среду: " << temp[2] << " градусов" << endl;
// Меняем значение
temp[0] = 30;
cout << "Новая температура в понедельник: " << temp[0] << endl;
return 0;
}
Вывод программы:
Температура в среду: 23 градусов
Новая температура в понедельник: 30
Цикл для перебора массива
Чтобы пройтись по всем элементам, удобно использовать цикл for:
#include <iostream>
using namespace std;
int main() {
int skorost[5] = {10, 25, 30, 15, 20};
cout << "Скорости за 5 замеров:" << endl;
for (int i = 0; i < 5; i++) {
cout << "Замер " << i+1 << ": " << skorost[i] << " км/ч" << endl;
}
return 0;
}
Вывод программы:
Скорости за 5 замеров:
Замер 1: 10 км/ч
Замер 2: 25 км/ч
Замер 3: 30 км/ч
Замер 4: 15 км/ч
Замер 5: 20 км/ч
Разбор типичных задач
Задача "Фрукты" (сбор данных в массив)
Нужно записать 5 фруктов, которые привезли за неделю, а потом вывести их все.
#include <iostream>
#include <string>
using namespace std;
int main() {
string frukty[5];
cout << "Введите 5 фруктов (каждый с новой строки):" << endl;
for (int i = 0; i < 5; i++) {
cin >> frukty[i];
}
cout << "Список полученных фруктов:" << endl;
for (int i = 0; i < 5; i++) {
cout << i+1 << ". " << frukty[i] << endl;
}
return 0;
}
Пример ввода:
Яблоко
Банан
Груша
Апельсин
Киви
Вывод:
Список полученных фруктов:
1. Яблоко
2. Банан
3. Груша
4. Апельсин
5. Киви
Задача "Запас материалов" (изменение элемента)
Дан массив с количеством продуктов. Нужно удвоить значение во втором пункте (индекс 1).
#include <iostream>
using namespace std;
int main() {
int produkty[4] = {10, 5, 20, 15}; // хлеб на индексе 1
cout << "Было: ";
for (int i = 0; i < 4; i++) {
cout << produkty[i] << " ";
}
cout << endl;
// Удваиваем количество хлеба (второй элемент, индекс 1)
produkty[1] = produkty[1] * 2;
cout << "Стало: ";
for (int i = 0; i < 4; i++) {
cout << produkty[i] << " ";
}
cout << endl;
return 0;
}
Вывод:
Было: 10 5 20 15
Стало: 10 10 20 15
Задача "Юный альпинист" (поиск по условию)
Вася записывал высоту каждый день. Нужно найти дни, когда высота была больше 200 метров.
#include <iostream>
using namespace std;
int main() {
double vysoty[7] = {150.0, 210.5, 180.0, 250.0, 190.0, 300.0, 170.0};
cout << "Дни, когда высота была больше 200 м:" << endl;
for (int i = 0; i < 7; i++) {
if (vysoty[i] > 200.0) {
cout << "День " << i+1 << ": " << vysoty[i] << " м" << endl;
}
}
return 0;
}
Вывод:
Дни, когда высота была больше 200 м:
День 2: 210.5 м
День 4: 250 м
День 6: 300 м
Частые ошибки новичков
- Выход за границы массива: если массив из 5 элементов, индексы от 0 до 4. Обращение к индексу 5 — ошибка! Программа может работать неправильно или "упасть".
- Путаница с индексами: помни, что первый элемент — это индекс 0, а не 1. Если нужно вывести номер по порядку (1, 2, 3), пиши
i+1. - Забыли инициализировать: если объявить массив и не заполнить его, там будет "мусор" (случайные числа). Всегда задавай начальные значения.
- Разные типы: в массиве можно хранить только значения одного типа. Нельзя смешивать
intиstringв одном массиве.
Итоговый пример: "Суп в школе"
Повар записывает, сколько порций супа было приготовлено каждый день с понедельника по пятницу. Нужно посчитать общее количество порций за неделю и вывести дни, когда супа было больше 30 порций.
#include <iostream>
using namespace std;
int main() {
int porcii[5]; // 5 дней: пн, вт, ср, чт, пт
string dni[5] = {"Пн", "Вт", "Ср", "Чт", "Пт"};
cout << "Введите количество порций супа за каждый день:" << endl;
for (int i = 0; i < 5; i++) {
cout << dni[i] << ": ";
cin >> porcii[i];
}
// Считаем общее количество
int vsego = 0;
for (int i = 0; i < 5; i++) {
vsego = vsego + porcii[i];
}
cout << "Всего порций за неделю: " << vsego << endl;
// Ищем дни, когда порций больше 30
cout << "Дни, когда супа было больше 30 порций:" << endl;
for (int i = 0; i < 5; i++) {
if (porcii[i] > 30) {
cout << dni[i] << " (" << porcii[i] << " порций)" << endl;
}
}
return 0;
}
Пример ввода:
25
32
28
35
20
Вывод:
Всего порций за неделю: 140
Дни, когда супа было больше 30 порций:
Вт (32 порций)
Чт (35 порций)
Массивы — это мощный инструмент. С их помощью можно хранить списки, обрабатывать данные и решать множество задач. Главное — запомнить, что индексы начинаются с нуля, и всегда следить, чтобы не выйти за границы массива.