out()函数不起作用 在这个C++代码中,我编写了一个队列的基本代码(FIFO)。但是out()函数似乎不起作用,它会将最早的输入返回到数组中。首先调用该函数时,它会工作。但第二次,情况并非如此。代码如下: #include<iostream> using namespace std; class Queue { int que[100]; int index=0; int f; public: void in(int num); int out(); }; void Queue::in(int num){ if(index==100) cout<<"Que is full\n"; else{ que[index]=num; f=index; index++; } } int Queue::out(){ if(index==0) cout<<"Queue is empty\n"; else{ if(f>=0){ return que[--index-f]; index++; f--; }else{ cout<<"Queue is empty"; return 0; } } } int main(){ Queue q; q.in(101); q.in(202); q.in(303); q.in(404); cout<<q.out()<<"\n"; cout<<q.out()<<"\n"; cout<<q.out(); } #包括 使用名称空间std; 类队列{ int que[100]; int指数=0; int f; 公众: 无效(整数); int out(); }; 无效队列::in(int num){ 如果(索引==100) cout
这是因为您在修改f和索引之前从函数返回。此外,如果队列已满,函数可以结束而不返回任何内容。如前所述,您的代码永远不会得到过去的out()函数不起作用 在这个C++代码中,我编写了一个队列的基本代码(FIFO)。但是out()函数似乎不起作用,它会将最早的输入返回到数组中。首先调用该函数时,它会工作。但第二次,情况并非如此。代码如下: #include<iostream> using namespace std; class Queue { int que[100]; int index=0; int f; public: void in(int num); int out(); }; void Queue::in(int num){ if(index==100) cout<<"Que is full\n"; else{ que[index]=num; f=index; index++; } } int Queue::out(){ if(index==0) cout<<"Queue is empty\n"; else{ if(f>=0){ return que[--index-f]; index++; f--; }else{ cout<<"Queue is empty"; return 0; } } } int main(){ Queue q; q.in(101); q.in(202); q.in(303); q.in(404); cout<<q.out()<<"\n"; cout<<q.out()<<"\n"; cout<<q.out(); } #包括 使用名称空间std; 类队列{ int que[100]; int指数=0; int f; 公众: 无效(整数); int out(); }; 无效队列::in(int num){ 如果(索引==100) cout,c++,C++,这是因为您在修改f和索引之前从函数返回。此外,如果队列已满,函数可以结束而不返回任何内容。如前所述,您的代码永远不会得到过去的返回que[--index-f]因此,您应该对代码重新排序,以便在执行该语句之前不会修改索引,也不会修改f f--; return que[index-f-2]; 索引的增量和减量是不必要的,所以不要这样做。即使进行了此更改,您的代码也不会执行指定的所需行为,即()函数实际上也是错误的。通过设置f=index,如果在调用out函数后向队列中添加了一个数字,则会在初
返回que[--index-f]
因此,您应该对代码重新排序,以便在执行该语句之前不会修改索引,也不会修改f
f--;
return que[index-f-2];
索引的增量和减量是不必要的,所以不要这样做。即使进行了此更改,您的代码也不会执行指定的所需行为,即()函数实际上也是错误的。通过设置f=index
,如果在调用out函数后向队列中添加了一个数字,则会在初始输入时重置通过它的进程。最后,out函数实际上不会从队列中删除第一个条目
除非迫切需要不利用动态分配,否则我建议您从使用数组改为使用std::vector
。然后,您的队列类将具有动态队列大小,您可以在创建对象时更改该大小。请参见以下内容:
class Queue{
private:
std::vector<int> que;
int maxSize;
public:
Queue(int size=100);
~Queue();
void in(int num);
int out();
};
Queue::Queue(int size):maxSize(size) {}
Queue::~Queue() {}
void Queue::in(int num)
{
if(que.size() >= maxSize)
std::cout << "Que is full\n";
else
que.push_back(num);
}
int Queue::out()
{
if(que.empty())
{
std::cout << "Queue is empty\n";
//optionally throw an error here if you really want the program to not return a number
return 0;
}
int returnVal = que.front();
que.erase(que.begin());
return returnVal;
}
类队列{
私人:
std::vector que;
int-maxSize;
公众:
队列(int size=100);
~Queue();
无效(整数);
int out();
};
队列::队列(整数大小):maxSize(大小){}
队列::~Queue(){}
无效队列::in(int num)
{
如果(que.size()>=maxSize)
std::你真的需要更具体一些,而不是说“不起作用”。当第一次调用它时返回101..(q.in(101)),但当第二次调用时,它返回值,如10143256723,等等。return que[--index-f];
在这一行之后,函数中不再执行任何内容。使用所有警告和调试信息编译(g++-Wall-g
)然后使用调试器(gdb
),您可能也应该显式初始化f
。