внутри diagonal_diff
у вас есть следующий цикл:
int sum_2 = 0;
for (auto i = size - 1; i >= 0; --i)
{
auto j = (size-1) - i;
sum_2 = vector[i][j] + sum_2;
}
Проблема в том, что size
объявление выглядит так:
auto size = vector.size();
vector.size()
возвращает вам size_t
тип объекта, что означает отсутствие отрицательных значений.
Снова посмотрите на ваш цикл и посмотрите на i
объявление:
auto i = size - 1
Поскольку size
имеет тип size_t
, ваш i
будет автоматически size_t
. Теперь условие остановки вашего цикла: i >= 0
, что означает всегда true
в случае, если i
равно size_t
. Когда i
равно 0, и вы попадаете в часть третьего цикла: --i
, вместо получения -1
, он получает наибольшее значение size_t
. Тогда вы делаете: sum_2 = vector[i][j] + sum_2;
и получаете исключение.
Чтобы решить эту проблему, все, что вам нужно сделать, это изменить объявление i
на: int i = size - 1
.
Примечание. Настоятельно не рекомендуется использовать vector
в качестве имени, особенно если вы не используете using namespace std;
внутри своего кода. vector
- это имя класса, и оно может привести к конфликтам кода .. вместо него можно использовать vec
.