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

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函数后向队列中添加了一个数字,则会在初

这是因为您在修改f和索引之前从函数返回。此外,如果队列已满,函数可以结束而不返回任何内容。

如前所述,您的代码永远不会得到过去的
返回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