Итак, у меня есть задание, где у меня есть светофор, который меняет направление и позволяет машинам проезжать один за другим.Направление меняется по часовой стрелке.Я реализовал код, который читает начальное направление запуска, проезжающие машины в каждом направлении и код, который читает номерной знак, направление и время, необходимое для прохождения.Проблемы возникают, когда он переключается с E на S на W на N, но затем он застревает, и я сталкиваюсь с вектором вне диапазона
#include <iostream>
#include <vector>
#include <queue>
using namespace std;
struct cars
{
string name;
char dr;
int t;
};
bool init(vector<cars> &arr, char direct)
{
for (auto i = 0; arr.size(); i++)
{
if (arr.at(i).dr == direct)
{
return true;
}
}
return false;
}
char direct_shift(char e)
{
if (e == 'N')
{
return 'E';
}
else if (e == 'E')
{
return 'S';
}
else if (e == 'S')
{
return 'W';
}
else if (e == 'W')
{
return 'N';
}
else
{
return '\0';
}
}
int main() {
vector <cars> keeper;
queue <cars> que;
char track; //starting direction
int car_num; //starting car num
string n;
char d;
int sec;
cin >> track;
cin >> car_num;
while (cin >> n >> d >> sec) //takes the input if plate, direction and time
{
cars temp;
temp.name = n;
temp.dr = d;
temp.t = sec;
keeper.push_back(temp);
}
for (int i = 0; i < keeper.size(); i++) {
cout << keeper[i].name << " " << keeper[i].dr << " " << keeper[i].t << endl;
} //checks if it all inputted it
char curr_dir = track;
while (not keeper.empty())
{
for (auto i = 0; i < keeper.size(); i++) {
reset:
if (init(keeper, curr_dir) == true)
{
if (keeper[i].dr == curr_dir) {
que.push(keeper.at(i)); //pushes vector at i into queue
keeper.erase(keeper.begin() + i); // deletes vector at index i
cout << que.front().name << " Going to " << que.front().dr << " at " << que.front().t << endl;
que.pop();
curr_dir = direct_shift(curr_dir);
break;
}
}
else
{
curr_dir = direct_shift(curr_dir);
}
}
}
}