C++
Как найти максимальное число в массиве C++: цикл и max_element
Максимальное число в массиве C++ можно найти двумя основными способами: вручную через цикл или через стандартную функцию std::max_element. Для учебных задач полезно понимать оба варианта
Самая простая идея: берем первый элемент как текущий максимум, затем проходим по остальным элементам и обновляем максимум, если нашли число больше
Поиск максимума через цикл
#include <iostream>
int main() {
int numbers[] = {4, 10, -2, 25, 7};
int size = 5;
int maxValue = numbers[0];
for (int i = 1; i < size; ++i) {
if (numbers[i] > maxValue) {
maxValue = numbers[i];
}
}
std::cout << "Максимум: " << maxValue << "\n";
return 0;
}
Вывод:
Максимум: 25
Цикл начинается с i = 1, потому что элемент numbers[0] уже взят как начальный максимум
Почему нельзя начинать максимум с нуля
Новички часто пишут:
int maxValue = 0;
Это ошибка, если в массиве могут быть отрицательные числа:
int numbers[] = {-10, -3, -25};
Правильный максимум здесь -3, но если начать с нуля, программа ошибочно оставит 0, которого вообще нет в массиве
Правильнее начинать с первого элемента:
int maxValue = numbers[0];
Проверка пустого массива
У обычного статического массива в примере размер известен. Но если вы работаете с std::vector, он может быть пустым. Тогда нельзя брать numbers[0]
#include <iostream>
#include <vector>
int main() {
std::vector<int> numbers = {};
if (numbers.empty()) {
std::cout << "Массив пустой\n";
return 1;
}
int maxValue = numbers[0];
for (std::size_t i = 1; i < numbers.size(); ++i) {
if (numbers[i] > maxValue) {
maxValue = numbers[i];
}
}
std::cout << maxValue << "\n";
return 0;
}
Проверка empty() защищает от обращения к несуществующему элементу
Поиск через std::max_element
В реальном C++ коде удобно использовать std::max_element:
#include <algorithm>
#include <iostream>
#include <vector>
int main() {
std::vector<int> numbers = {4, 10, -2, 25, 7};
if (numbers.empty()) {
std::cout << "Нет элементов\n";
return 1;
}
auto it = std::max_element(numbers.begin(), numbers.end());
std::cout << "Максимум: " << *it << "\n";
return 0;
}
std::max_element возвращает итератор на максимальный элемент. Чтобы получить само значение, используют *it
max_element для обычного массива
#include <algorithm>
#include <iostream>
#include <iterator>
int main() {
int numbers[] = {4, 10, -2, 25, 7};
auto it = std::max_element(numbers, numbers + std::size(numbers));
std::cout << *it << "\n";
return 0;
}
Если C++17 недоступен, вместо std::size(numbers) можно использовать заранее известный размер
Найти индекс максимального элемента
Если нужен не только максимум, но и его позиция:
int maxIndex = 0;
for (int i = 1; i < size; ++i) {
if (numbers[i] > numbers[maxIndex]) {
maxIndex = i;
}
}
std::cout << "Индекс: " << maxIndex << "\n";
Так вы храните индекс, а значение получаете как numbers[maxIndex]
Частые ошибки
Начинать максимум с 0
Такой код ломается на массивах из отрицательных чисел
Не проверять пустой vector
Перед numbers[0] у std::vector проверьте empty()
Забыть разыменовать итератор
std::max_element возвращает итератор, поэтому значение — это *it, а не it
Короткий вывод
Для учебного понимания найдите максимум циклом, начиная с первого элемента массива. Для практического кода используйте std::max_element и не забывайте проверять пустой контейнер
Связанные материалы:
Что почитать дальше по C++
Если нужен общий маршрут по теме, откройте рубрику C++. Для соседних задач пригодятся эти разборы:
- Как проверить, есть ли символ в строке C++: find, npos и цикл
- Факториал в C++: цикл, рекурсия и проверка переполнения
- C++ с нуля: первый файл, переменные и вывод
- Enter в C++: перенос строки, std::endl и ввод через cin