我以为我这样做是对的,但它似乎没有起作用。我基本上正在尝试一个队列,它可以正常使用一种数据类型,但现在我正在尝试添加多个(最后我想要一个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();
}
}
它没有结构,但显然它只接受队列中每个项目的一个变量。有没有办法让多个项目?
答案 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(存储在产品结构中)。
如果要同时存储product1
和product2
,则需要一个公共基础结构,它既可以扩展也可以存储指针(到基础)而不是值本身(用于avoud切片) )。此时,您也可以使用class
代替struct