@Chipu

В чем ошибка в программе [векторы]?

Сама программа:
#include <iostream>
#include <algorithm>
#include <string>
#include <vector>
using namespace std;
int main() {
	vector <double> rast;				 // вектор расстояний
	double min = 9999999;
	double max = -9999999;
	double x = 0;;
	double summa = 0;
	cout << "Vvodite chisla [dlya vixoda vvedite bukvy]";
	while (cin >>x) {
		rast.push_back(x);
	}


	for (int i = 0; i < rast.size(); ++i) {
		summa += rast[i];
		cout << '\n' << rast[i];
		if (rast[i] + rast[i + 1] <= min) {
			min = rast[i] + rast[i + 1];
		}
		else {}
		

		if (rast[i] + rast[i + 1] >= max) {
			max = rast[i] + rast[i + 1];
		}
		else {}  
	}
	cout << '\n' << "Minimalnoe rasstoyanie =" << min << '\n' << "Maksimalnoe rasstoyanie =" << max << "\n"
		<< "Summarnoе rasstoyanie =" << summa;
	return 0;
}

После ее выполнения выскакивает ошибка:
_DEBUG_ERROR("vector subscript out of range");

Как исправить?
  • Вопрос задан
  • 485 просмотров
Решения вопроса 1
devalone
@devalone
̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻
Не выходить за пределы вектора, очевидно же.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
Думаю тут проблема в том, что ты при вычислении min и max лезешь на 1 элемент вперед. Таким образом когда мы подходим к концу массива, ты выходишь за его границы. Однако тут по логике точно ошибка.

Но опыта у меня мало, поэтому будем ждать ещё что люди скажут.
Я бы сделал простую проверку через if.
if ( (i + 1) > rast.size()) {
  break;
}
Ответ написан
@res2001
Developer, ex-admin
Расстояние, думаю, все таки должно быть разностью, а не суммой.
Сделайте отдельный цикл для суммы от 0 до size-1.
И отдельный цикл для min/max от 1 до size-2. Перед началом цикла min = max = rast[0] + rast[1]. Ну и size должен быть > 2.
else{} лишнее, не нужно засорять код. И так все очевидно.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы