使用STL的c++:堆栈和队列
C++ using STL: Stack and Queue
作业要求:
一天的数据集可以在First Class上的lot.txt文件中找到。
到达/离开代码:字符(A或D)许可证字符串(例如BOSS)表示军事时间的时间整数值
一个早起的人一个工人一个首席执行官一个职员一个经理商务英语900句商务英语900句商务英语900句商务英语900句商务英语900句商务英语900句工人1100 A看门人1100 D经理1130车辆应该记录为包含许可证和到达时间。为简单起见,时间将是一个整数代表军事时间。包括c++ string类。
struct Vehicle{字符串许可证;//license值int到来;//军用时间(0 - 2359)};读入数据文件的行并重新创建汽车的运动进出停车场。车辆每小时收费8美元在他们逗留期间。部分小时是四舍五入的。你是否可以假设只有停车场的车主才会离开请求。报告当天所有停在停车场的车以及电荷之和。使用讨论过的模板堆栈和队列类在课堂上。
对于每次处理的到货,您应该报告:许可证为xxxxxx的汽车停在xxxx或牌照为xxxxxx的汽车在xxxx -被拒绝缘分已满!
对于每一个处理的出发,你应该报告:有许可证的汽车XXXXXX于XXXX离开,支付$xx.xx
当汽车离开时,我的零件有麻烦。我不熟悉堆栈和队列,但据我所知,堆栈是后进先出,队列是先进先出。
我有:
struct Vehicle
{
char ad; // Arrival departure char
string license; // license value
int arrival; // arrival in military time
};
int main()
{
ifstream fin; // declare input file stream object
fin.open ("lot.txt"); //open data text
stack<string> stack; // STL Stack object
queue<string> q; // STL Queue object
Vehicle v; // Object of struct Vehicle
while(!fin.fail()){
fin >> v.ad >> v.license >> v.arrival;
if (v.ad == 'A' && stack.size() < 5){
stack.push(v.license);
cout << endl << "Car with license " << v.license << " parked at " << v.arrival;
}else if(v.ad == 'A' && stack.size() >= 5){
cout << endl << "Car with license " << v.license << " turned away at " << v.arrival << " - LOT FULL";
}else if(v.ad == 'D'){
string departingcar = v.license;
for(int i=0; i<stack.size(); i++)
//am I on the right track with a for loop?
q.push(v.license);
stack.pop();
q.pop();
if(departingcar != v.license){
stack.push(v.license);
}
}
}
}
return 0;
}
我可以读取车辆没有问题,但当我必须从堆栈中删除车辆,将它们放入队列,然后将它们插入堆栈时,我迷路了。
目前你的for循环并没有真正的意义,因为在你向队列中添加了一些东西之后,你也弹出了前面的元素,永远失去了它,因为你从来没有把它保存在其他地方。
我假设你在这里要做的是找到插入到堆栈中的汽车,并将其移除。如果是,那么执行如下操作:
string departingcar = v.license;
//find and remove the license plate from the stack
for(int i=0; i<stack.size(); i++)
{
if (departingcar != stack.top())
{
q.push(stack.top());
stack.pop();
}
else
{
stack.pop();
break;
}
}
//put the remaining cars back in the stack and empty out the queue
while(!q.empty())
{
stack.push(q.front());
q.pop();
}
所以基本上这里发生的是,我们在队列中添加的汽车不等于出发汽车的车牌。如果遇到想要移除的汽车的车牌,则不将其添加到队列中,而是将其从堆栈中移除,并在找到汽车后退出for循环。接下来,简单地清空队列,将之前从堆栈中移出的小车推回到堆栈中。
- 堆栈和队列是否像C++中的数组一样传递?
- 了解使用堆栈实现队列的递归调用机制
- 为什么某些 STL 容器(堆栈、队列、优先级队列)不支持迭代器?
- 嵌套容器:为什么我无法访问堆栈队列顶部的堆栈?C++
- 堆栈和队列的C++默认实现
- 前缀表示法 C++,分段错误(堆栈和队列)
- 将元素从队列复制到堆栈
- 具有父类和虚拟函数的堆栈和队列
- 在C++中使用队列和堆栈对 2 个向量进行加减
- 在堆或堆栈上分配的 std::队列的内存
- 使用提升库在队列和堆栈数据结构上保存和加载数据时出错
- 尝试使用堆栈创建队列.为什么我会遇到int转换错误的空白
- 堆栈,队列延迟
- 将双重链接列表与C 中的堆栈和队列类链接
- 堆栈和队列在 Dev-C++ 中给出错误
- 根据堆栈类实现队列类的复制构造函数
- 过度填充堆栈和队列容量(C )
- 堆栈/队列 C++ 中的内存泄漏
- 使用C++堆栈/队列分析XML文件
- 什么是堆栈?arrayStack ?arrayQueue ?堆栈队列 ?它们在C++上有何不同