【发布时间】:2012-11-20 17:38:42
【问题描述】:
queue < int* > qq;
for (int i = 0; i < N; i++) {
int cc[2] = {i, i + 1};
qq.push(cc);
}
N 很大但不精确,所以我想使用队列。 我想存储很多数组来排队,但是qq存储的数组是同一个。 我该怎么做?
【问题讨论】:
queue < int* > qq;
for (int i = 0; i < N; i++) {
int cc[2] = {i, i + 1};
qq.push(cc);
}
N 很大但不精确,所以我想使用队列。 我想存储很多数组来排队,但是qq存储的数组是同一个。 我该怎么做?
【问题讨论】:
你所做的是句法正确,但概念错误。您正在插入在每次迭代中创建并在迭代结束时销毁的本地数组;这使qq 处于不可用状态。在循环之外,取消引用 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 在循环中都有相同的堆栈位置。
您需要在堆中分配cc 数组,可能使用int *cc = new int[2];(但稍后您需要delete)。
更好的方法是将cc 声明为std::vector 或std::array 或std::tuple(在C++11 中)。
【讨论】:
您每次推送相同的地址,即cc。您需要定义一个包含这两个值的结构,如下所示:
struct CC {
int x, y;
CC(int _x, int _y) : x(_x), y(_y) {}
}
queue<CC> qq;
然后..
qq.push(CC(i, i + 1));
【讨论】: