【问题标题】:I made a queue management system and created a function to add two queues我做了一个队列管理系统并创建了一个添加两个队列的函数
【发布时间】:2021-04-15 01:37:29
【问题描述】:

这是我的代码。我创建了使用操作重载添加两个队列的函数。对于某些共振,它总是返回一个空

#include <iostream>
using namespace std; 

class Queue { 
    int size; 
    int* queue; 
    
    public:
    Queue() { 
        size = 0;
        queue = new int[100];
    }
    //adds an item to  the queue`enter code here`
    void add(int data) { 
        queue[size] = data; 
        size++;
    }
    //removes an item from the queue
    void remove() { 
        if (size == 0) { 
            cout << "Queue is empty"<<endl; 
            return; 
        } 
        else { 
            for (int i = 0; i < size - 1; i++) { 
                queue[i] = queue[i + 1]; 
            } 
            size--; 
        } 
    } 
    // a function to display the queue
    void print() { 
        if (size == 0) { 
            cout << "Queue is empty"<<endl; 
            return; 
        } 
        for (int i = 0; i < size; i++) { 
            cout<<queue[i]<<" <- ";
        } 
        cout << endl;
    }

这是添加队列的功能。它没有返回错误。但是每当我尝试添加队列时,它总是返回一个空队列。可能是什么问题

  Queue operator+(Queue &obj){
      Queue res;
      res.queue = *queue + obj.queue;
      return res;
  }
    
}; 

这里开始主函数。

 int main() { 
    Queue q1; 
    q1.add(42); q1.add(2); q1.add(8);  q1.add(1);
    Queue q2;
    q2.add(3); q2.add(66); q2.add(128);  q2.add(5);
    Queue q3 = q1+q2;
    q3.print();

    return 0; 
} 

【问题讨论】:

  • *queue + obj.queue 这并不像您所相信的那样连接两个整数数组。这需要一个指针obj.queue,将它增加整数*queue(显然是队列中的第一个元素),然后返回结果指针。基本上,它没有任何意义——你只是偶然发现了一个恰好编译的无意义的表达式。
  • 您对指针和内存分配如何工作的理解根本不正确。显示的代码需要从根本上以多种方式重写。没关系,每个人都必须在某个时候学习这个,但是学习这个的最好方法是继续阅读和学习你的教科书,并尝试它的练习程序。不幸的是,Stackoverflow 不能替代您的教科书。
  • 哦,谢谢...我是新手,刚刚开始学习指针和内存分配。可能我需要了解更多关于这个主题的信息
  • 先生,您能告诉我如何使用运算符重载添加两个队列

标签: c++ pointers queue operator-overloading


【解决方案1】:

你的代码应该做这样的事情。这段代码不会赢得任何风格奖,我只是想向您展示需要什么

Queue operator+(Queue &obj){
  Queue res;
  res.size = size + obj.size; // work out the new queues size
  res.queue = new int[100]; // allocate memory for new queue
  for (int i = 0; i < size; ++i) // copy from first queue to new queue
      res.queue[i] = queue[i];
  for (int i = 0; i < obj.size; ++i) // copy from second queue to new queue
      res.queue[size + i] = obj.queue[i];
  return res;
}

正如我所说,这段代码以及您编写的其他代码都有各种各样的问题。但它有望让您对需要做什么有所了解。

【讨论】:

  • 它确实有效!我刚刚替换了 queue[i];到您刚刚发布的代码的第 8 行中的 obj.queue[i] 。这很有意义。我只是在同一个指针上递增。非常感谢楼主
  • @SandeshYadav 是的,这是一个错误,很明显。我自己也修好了。
猜你喜欢
  • 2012-05-24
  • 2010-10-26
  • 2020-05-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多