【发布时间】:2021-08-25 10:59:29
【问题描述】:
我想写一个程序从用户那里读取命令,当输入d时,输入了一辆出租车,它提示输入driver_id并将出租车存储在队列中(队列最多可以有n辆出租车),当命令@ 987654326@由客户输入,它将队列中最早的出租车分配给客户。
我正在尝试使用 struct 成员函数来解决它,以便我们的代码看起来不错,但是虽然我已经初始化了 n=4,但它只能存储 2 出租车,并显示队列已满第三个条目,这不应该发生。请检查我的方法。
程序运行如下:
PS C:\Users; if ($?) { g++struct_taxi};; if ($?) { .\struct_taxi}
enter command:d
enter driverid:122
enter command:d
enter driverid:124
enter command:d
enter driverid:126
Q is full
代码:
#include<iostream>
using namespace std;
const int n=4;
struct Queue{
int elements[n],nwaiting,front;
void initialize(){
nwaiting=0;
front=0;
}
bool insert(int v){
if(nwaiting>=n)
return false;
elements[(front+nwaiting)%n]=v;
nwaiting++;
return true;
}
bool remove(int &v){
if(nwaiting==0)
return false;
else{
v=elements[front];
front=(front+1)%n;
nwaiting--;
return true;
}
}
};
int main(){
Queue q;
q.initialize();
while(true){
cout<<"enter command:";
char c;cin>>c;
if(c=='d'){
cout<<"enter driverid:";
int driverid;cin>>driverid;
if(!q.insert(driverid)){
cout<<"Q is full\n";}
else{
q.insert(driverid);
}
}
else if(c=='c'){
int driverid;
if(!q.remove(driverid)){
cout<<"No taxi available.\n";
}
else
//q.remove(driverid);
cout<<"assigning:"<<" "<<driverid<<endl;
}
}
}
【问题讨论】:
-
而不是在你的结构中有一个“初始化”方法,你应该实现这个:C++ Constructors。查看 STL 库可能也是一个好主意,因为其中的类可以实现您尝试为您实现的大部分功能,例如 std::vector 或 std::queue。
-
@luiz 谢谢楼主,今天刚学构造函数,以后会去实现,会看你推荐的所有概念。
标签: c++ arrays struct member-function-pointers