Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/129.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用多个数据类型创建C++队列?_C++ - Fatal编程技术网

用多个数据类型创建C++队列?

用多个数据类型创建C++队列?,c++,C++,我以为我做得对,但似乎不起作用。我基本上是在试验一个队列,它可以很好地处理一种数据类型,但现在我尝试添加多个,最后我想要一个int和一个int列表 代码如下: #include <iostream> #include <queue> using namespace std; int main() { struct product { int x; int y; } ; queue<product> q;

我以为我做得对,但似乎不起作用。我基本上是在试验一个队列,它可以很好地处理一种数据类型,但现在我尝试添加多个,最后我想要一个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();
   }

}

它可以在没有结构的情况下工作,但是很明显,对于队列中的每个项目,它只接受一个变量。有没有一种方法可以拥有多个项目?

以下是主项目的外观。注意构造函数productint i、int j的添加,以及在向q添加元素时构造函数的使用

q、 push100,100无效,queue::push只接受一个参数。您将需要推出一款产品:

然后,队列中的两个100都存储在产品结构中

如果要同时存储product1和product2,则需要一个公共的基结构,该结构可以扩展和存储指向基的指针,而不是值本身,以避免切片。此时,您最好使用class而不是struct

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;
} ;

int main()
{
如其他人所述,向产品添加一个构造函数,该构造函数接受两个参数:

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));

你也可能会超负荷操作你的问题不清楚。添加多个项目是什么意思?@Attila我希望每个队列项目具有多个数据类型。因此,在本例中,队列的每个项目都有两个整数。不能有一个包含多个数据类型的队列,但可以有一个包含多个数据类型的变量的队列。寻找Boost.Variant,它似乎对我不起作用。我犯了很多错误。模板参数无效,在“;”之前的声明中的类型无效,前4个错误似乎与行队列q有关;hmjd的答案和你的答案是一样的。我丢失了构造函数,无法在本地声明..我看到了相同的错误您的方法与乱穿马路者的方法相同。如果我使用你或他的构造函数,我仍然会遇到同样的问题。还有其他人所说的构造函数。有趣的是,本地类型至少可以在VS2010中定义为模板参数。我作为答案编写的代码在VS2010上运行良好。@Jaywalker,真的吗?这就是我用plusg++检查的内容,但我使用extensions disabled/Za编译器标志编译。
struct product {
  int x;
  int y;
  product(int _x, int _y) : x(_x), y(_y) {}
} ;
struct product {
  int x;
  int y;
} ;

int main()
{
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));
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();
}