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++. Для соседних задач пригодятся эти разборы:

Подписаться
Уведомить о
guest
0 комментариев
Старые
Новые Популярные

Настройки cookie

0
Оставьте комментарий! Напишите, что думаете по поводу статьи.x