Я выполнил несколько тестов простой проблемы как в VS 19, так и в CodeBlocks после ошибки, которая продолжает появляться во многих моих проблемах с кодированием. Удивительно, но в Codeblocks все работает нормально, и я получаю ожидаемый результат, в то время как в VS я всегда получаю ошибку «векторный индекс вне диапазона».
Проблема довольно проста, получить наименьшее количество остановок до места назначения. (просто посчитайте их) Ошибка появляется во время l oop, где я сравниваю i с размером вектора.
Мне интересно, почему это на самом деле работает в кодовых блоках, а также хотелось бы знать, как исправить это в VS
#include <iostream>
#include <vector>
using namespace std;
int compute_min_refills(int dist, int tank, vector<int>& stations) {
int distanceTraversed = 0;
int i = 0;
int stops = 0;
bool impossible = false;
while (distanceTraversed<=dist)
{
if((distanceTraversed + tank)> dist)
{
distanceTraversed = dist;
return stops;
}
while ((distanceTraversed + tank) > stations[i] && i< stations.size())
{
i++;
impossible = false;
}
if ((distanceTraversed + tank) <= stations[i] || i == stations.size())
{
if (impossible == true)
{
return -1;
}
else
{
distanceTraversed += stations[i - 1];
stops++;
impossible = true;
}
}
}
return stops;
}
int main() {
int d = 0;
cin >> d;
int m = 0;
cin >> m;
int n = 0;
cin >> n;
vector<int> stations;
int a;
for (int i = 0; i < n; ++i)
{
cin>>a;
stations.push_back(a);
}
cout << compute_min_refills(d, m, stations) << "\n";
return 0;
}
Вот некоторые выводы, если вы хотите проверить это:
Ввод: 500 200 4 100 200 300 400