0

我以为我做对了,但它似乎不起作用。我基本上是在试验一个队列,它适用于一种数据类型,但现在我正在尝试添加多个(最后我想要一个 int 和一个 int 列表)。

这是代码:

#include <iostream>
#include <queue>
using namespace std;

int main()
{
    struct product {
      int x;
      int y;
    } ;


   queue<product> q;
   q.push(100, 100);
   q.push(200, 100);
   q.push(300, 100);
   q.push(400, 100);

   cout << "Size of the queue: " << q.size() << endl;

   while (!q.empty()) {
       cout << q.front() << endl;
       q.pop();
   }

}

它在没有结构的情况下工作,但显然它只接受队列中每个项目的一个变量。有没有办法拥有多个项目?

4

4 回答 4

3

queue::push方法需要一个参数,该参数必须是队列的类型。试试这样:

queue<product> q;
q.push(product(100, 100));
q.push(product(200, 100));
q.push(product(300, 100));
q.push(product(400, 100));

您还必须为您的结构定义一个构造函数:

struct product {
  int x;
  int y;
  product(int _x, int _y) : x(_x), y(_y) {}
} ;
于 2012-05-15T14:48:15.583 回答
3

认为为模板类型指定的类型不能是本地定义。改成:

struct product {
  int x;
  int y;
} ;

int main()
{

正如其他人已经说过的,添加一个product接受两个参数的构造函数:

struct product {
    int x;
    int y;
    product(int a_x, int a_y) : x(a_x), y(a_y) {}
};

...

q.push_back(product(100, 100));

您还可以重载operator<<以输出 a product

std::ostream& operator<<(std::ostream& a_out, const product& a_p)
{
    a_out << "product(" << a_p.x << ", " << a_p.y << ")";
    return a_out;
}

while (!q.empty()) {
    cout << q.front() << endl;
    q.pop();
}
于 2012-05-15T14:58:54.843 回答
2

这是您的主要外观。注意构造product(int i, int j)函数的添加,以及构造函数在添加元素时的使用q

int main ()
{
    struct product {
      int x;
      int y;

      product (int i, int j) : x(i), y(j) {}
    } ;

   queue<product> q;
   q.push(product (100, 100));
   q.push(product (200, 100));
   q.push(product (300, 100));
   q.push(product (400, 100));

   cout << "Size of the queue: " << q.size() << endl;

   while (!q.empty()) {
       cout << q.front().x << ", " << q.front().y << endl;
       q.pop();
   }

   return 0;
}
于 2012-05-15T14:46:51.457 回答
2

q.push(100, 100)无效,queue::push()只接受一个参数。您将需要推送 a product

product p(100, 100);
q.push(p);

然后你在队列中都有 100 个(存储在产品结构中)。

如果你想同时存储 aproduct1和 a product2,你将需要一个通用的基础结构来扩展和存储指针(指向基础)而不是值本身(以避免切片)。此时你不妨使用class而不是struct

于 2012-05-15T14:47:48.180 回答