Давайте исправим отступ:
if(od_ev == 0)
if(numbers[vector_size-1] > numbers[vector_size - 2])
cout<<"The larger value is: "<<numbers[vector_size - 1]<<'\n'
<<"The smaller value is: "<<numbers[vector_size - 2]<<'\n';
if(numbers[vector_size-1] - numbers[vector_size - 2] < formula_equal)
cout<<"These numbers are almost equal.";
else if(numbers[vector_size-1] < numbers[vector_size - 2])
cout<<"The larger value is: "<<numbers[vector_size - 2]<<'\n'
<<"The smaller value is: "<<numbers[vector_size - 1]<<'\n';
if(numbers[vector_size-2] - numbers[vector_size - 1] < formula_equal)
cout<<"these numbers are almost equal.";
else if(numbers[vector_size-1] == numbers[vector_size - 2])
cout<<numbers[vector_size-1]<<" is equal to "<<numbers[vector_size - 2]<<'\n';
Если вы не используете {}
, тогда тело if
- это всего лишь один оператор, следовательно, вы получаете доступ к вектору вне границ в первая итерация.
Для иллюстрации рассмотрим следующее:
if (number.size() > 1)
std::cout << number.size();
std::cout << number[0];
Правильно отформатировано:
if (number.size() > 1)
std::cout << number.size();
std::cout << number[0];
и, вероятно, должно было быть:
if (number.size() > 1) {
std::cout << number.size();
std::cout << number[0];
}
Я нахожу ваш vector_size
довольно запутанным. Используйте numbers.size()
(он имеет постоянную сложность, а не линейный, как можно было бы ожидать). Также используйте метод векторов at
для лучшей диагностики, когда вы не уверены на 100% в доступе только к действительным индексам.
Также не используйте double
для индекса, а double two = 2;
- полное нет - go. Если вы действительно хотите two
, то как минимум сделайте его const
, чтобы two = 3;
было невозможно.