queue < int* > qq;
for (int i = 0; i < N; i++) {
int cc[2] = {i, i + 1};
qq.push(cc);
}
N 很大但不精确,所以我想使用队列。我想存储很多数组来排队,但是qq存储的数组是同一个。我该怎么做?
您的代码将无法正常工作。每个cc
都在循环中具有相同的堆栈位置。
您需要cc
在堆中分配数组,也许使用int *cc = new int[2];
(但稍后您需要delete
)。
更好的方法是cc
声明为std::vector
orstd::array
或std::tuple
(在 C++11 中)。
您所做的在语法上是正确的,但在概念上是错误的。您正在插入在每次迭代中创建并在迭代结束时销毁的本地数组;处于qq
无法使用的状态。在循环之外,取消引用 of 的任何元素qq
都会调用未定义的行为。
使用std::vector
:
std::queue<std::vector<int>> qq;
for (int i = 0; i < N; i++) {
std::vector<int> cc{i, i + 1};
qq.push(cc);
}
您每次推送相同的地址,即cc
. 您需要定义一个包含这两个值的结构,如下所示:
struct CC {
int x, y;
CC(int _x, int _y) : x(_x), y(_y) {}
}
queue<CC> qq;
进而..
qq.push(CC(i, i + 1));