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