需要帮助将矢量解决范围问题.C
Need help on fixing vector out of range issue. C++
因此,我正在制作一个程序,该程序在交通灯系统上进行移动汽车。它与北部,东,南,西部的汽车分类,并以顺时针顺序移动。我正在遇到一个问题,即我实施了一个goto和一个重置柜台的问题,这是对给定运行中有多少辆车可以通过的量度。
我尝试将Goto设置为另一个地方,重新安排了它如何分配我的矢量并检查索引,并试图发现计数器重置可能无法工作的地方。该程序在Linux服务器上运行并使用孩子和父进程。
#include <iostream>
#include <vector>
#include <queue>
#include <unistd.h>
#include <sys/wait.h>
//Jeremy Bayangos - 1646316
//OS Class - Castro - Mon/Wed
//COSC3613
using namespace std;
struct cars
{
string name;
char dr;
int t;
};
bool init(vector<cars> &arr, char direct) {
if (!arr.empty())
for (vector<cars>::size_type i = 0; i < arr.size(); ++i) {
if (arr.at(i).dr == direct) {
return true;
}
} return false;
}
int direct_counter(vector<cars> &arr, char n)
{
int count = 0;
if (!arr.empty())
for (int i = 0; i < arr.size(); ++i) {
if (arr.at(i).dr == n) {
count++;
}
} return count;
}
char direct_bound(char e)
{
if (e == 'E')
{
cout << "Current direction: Eastbound" << endl;
}
if (e == 'S')
{
cout << "Current direction: Southbound" << endl;
}
if (e == 'W')
{
cout << "Current direction: Westbound" << endl;
}
if (e == 'N')
{
cout << "Current direction: Northbound" << endl;
}
}
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 ' ';
}
}
int main() {
vector <cars> keeper;
queue <cars> que;
char track; //starting direction
int car_num; //starting car num
string plate;
char dir;
int sec;
cin >> track;
cin >> car_num;
while (cin >> plate >> dir >> sec) //takes the input of plate,
direction and time
{
cars temp;
temp.name = plate;
temp.dr = dir;
temp.t = sec;
keeper.push_back(temp);
}
char curr_dir = track;
int counter = 0;
while (not keeper.empty())
{
for (auto i = 0; i < keeper.size(); i++) {
truckstop:
if (init(keeper, curr_dir))//if directions is inside
vector
{
if (keeper.at(i).dr == curr_dir)// if current
direction its facing is correct
{
if (car_num == 1 or
direct_counter(keeper, curr_dir == 1))
{
que.push(keeper[i]); //pushes
vector at i into queue
keeper.erase(keeper.begin() +
i); // deletes vector at index i
curr_dir =
direct_shift(curr_dir);
counter = 0;
break;
}
else if (car_num > 1) {
que.push(keeper[i]); //pushes
vector at i into queue
keeper.erase(keeper.begin() +
i); // deletes vector at index i
counter++;
if (counter == car_num) {
curr_dir =
direct_shift(curr_dir);
counter = 0;
break;
}
else {
counter = 0;
goto truckstop;
}
}
}
}
else
{
curr_dir = direct_shift(curr_dir);
goto truckstop;
}
}
}
int pid;
char d1 = que.front().dr;
char d2;
while (not que.empty())
{
if (d1 != d2)
{
direct_bound(que.front().dr);
}
if ((pid = fork() == 0))
{
cout << "Car " << que.front().name << " is using the
intersection for " <<
que.front().t << " sec(s)." << endl;
sleep(que.front().t);
exit(0);
}
else
{
d1 = que.front().dr;
wait(0);
que.pop();
if (not que.empty())
{
d2 = que.front().dr;
}
}
}
return 0;
}
您无需同步即可访问父和子过程的'que',这可能会导致不可预测的结果。我建议您首先实现您的逻辑而无需"叉"。
相关文章:
- 为什么在全局范围内使用"extern int a"似乎不行?
- 运行同一解决方案的另一个项目的项目
- Project Euler问题4的错误解决方案
- 尝试通过多个向量访问变量时,向量下标超出范围
- Ardunio UNO解决了多个重叠的定时器循环
- 错误:未在此范围内声明'reverse'
- 正在将指针转换为范围
- 使用std::transform将一个范围的元素添加到另一个范围中
- 在基于范围的for循环中使用结构化绑定声明
- 如何解决gcc编译器优化导致的centos双编译器设置中的分段错误
- 如何计算数据类型的范围,例如int
- 为什么 const std::p air<K,V>& 在 std::map 上基于范围的 for 循环不起作用?
- 两个文件使用彼此的功能-如何解决
- 计算每个节点的树高,帮助我解释这个代码解决方案
- 在 c++ 中解决段树以外的范围查询的有效方法是什么?
- 需要帮助将矢量解决范围问题.C
- Visual Studio中的解决方案范围定义
- Visual Studio中的解决方案范围内的生成配置
- 我一直得到下标超出范围不知道如何解决它
- 给定一个范围,我必须计算数组中数字的频率.给定的解决方案是否有效