2
queue < int* > qq;

for (int i = 0; i < N; i++) {
    int cc[2] = {i, i + 1};
    qq.push(cc);
}

N 很大但不精确,所以我想使用队列。我想存储很多数组来排队,但是qq存储的数组是同一个。我该怎么做?

4

3 回答 3

6

您的代码将无法正常工作。每个cc都在循环中具有相同的堆栈位置。

您需要cc在堆中分配数组,也许使用int *cc = new int[2];(但稍后您需要delete)。

更好的方法是cc声明为std::vectororstd::arraystd::tuple(在 C++11 中)。

于 2012-12-03T09:17:03.540 回答
2

您所做的在语法上是正确的,但在概念上是错误的。您正在插入在每次迭代中创建并在迭代结束时销毁的本地数组;处于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);
}
于 2012-12-03T09:16:20.743 回答
0

您每次推送相同的地址,即cc. 您需要定义一个包含这两个值的结构,如下所示:

struct CC {
    int x, y;
    CC(int _x, int _y) : x(_x), y(_y) {}
}

queue<CC> qq;

进而..

qq.push(CC(i, i + 1));
于 2012-12-03T09:18:54.167 回答