Почему возникает ошибка ‘std::out_of_range’?

Ошибка 'std::out_of_range' возникает в C++ при попытке получить доступ к элементу контейнера (например, std::vector или std::array) по индексу, который находится за пределами допустимого диапазона.

Допустимый диапазон индексов в контейнерах начинается с нуля и заканчивается на количество элементов минус один. Например, если в векторе есть 5 элементов, то индексы от 0 до 4 являются допустимыми, а индекс 5 будет за пределами диапазона и может вызвать ошибку 'std::out_of_range'.

Ошибки 'std::out_of_range' можно избежать, проверяя диапазон индекса перед доступом к элементу. Это можно сделать с помощью условного оператора (if) или с помощью функций, таких как std::vector::at(), которые автоматически проверяют диапазон индекса и выбрасывают исключение 'std::out_of_range' в случае нарушения.

Пример использования функции std::vector::at() для избежания ошибки 'std::out_of_range':

std::vector<int> numbers = {1, 2, 3, 4, 5};
if (index < numbers.size()) {
    int number = numbers.at(index); // проверяем диапазон индекса
    // выполнение кода при успешном доступе к элементу
} else {
    // выполнение кода в случае, если индекс выходит за пределы допустимого диапазона
}

Также для избежания ошибки 'std::out_of_range' можно использовать функцию std::vector::size(), чтобы получить размер контейнера, и проверить индекс по отношению к этому размеру:

std::vector<int> numbers = {1, 2, 3, 4, 5};
if (index < numbers.size()) {
    int number = numbers[index]; // проверяем диапазон индекса
    // выполнение кода при успешном доступе к элементу
} else {
    // выполнение кода в случае, если индекс выходит за пределы допустимого диапазона
}

Важно быть внимательным при работе с индексами, особенно если они вычисляются динамически или получаются от пользователя. Убедитесь, что индекс находится в допустимом диапазоне, чтобы избежать ошибки 'std::out_of_range'.