创建具有多个数据类型的c ++队列?

时间:2012-05-15 14:28:18

标签: c++

我以为我这样做是对的,但它似乎没有起作用。我基本上正在尝试一个队列,它可以正常使用一种数据类型,但现在我正在尝试添加多个(最后我想要一个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 个答案:

答案 0 :(得分: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) {}
} ;

答案 1 :(得分: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<<以输出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();
}

答案 2 :(得分: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;
}

答案 3 :(得分:2)

q.push(100, 100)无效,queue::push()只接受一个参数。您需要改为product

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

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

如果要同时存储product1product2,则需要一个公共基础结构,它既可以扩展也可以存储指针(到基础)而不是值本身(用于avoud切片) )。此时,您也可以使用class代替struct