Rumah > Soal Jawab > teks badan
如下列代码,
#include <iostream>
#include <queue>
int main() {
queue<int>* queue_list[10];
for (int l = 0; l < 10; ++l) {
queue<int> queue;
queue_list[l] = &queue;
}
for (int i = 0; i < 10; ++i) {
cout << queue_list[i] << endl;
}
}
我循环初始化了10个队列,可是我打印出来发现是同一个地址,会互相影响;请问如何可以让10个队列互相独立。
伊谢尔伦2017-04-17 14:48:23
你的queue
是声明在for
循环内部的。每次循环queue
都在同一个位置被创建,然后就被销毁掉了。所以始终得到的是同一个地址。退出循环时,所有的queue
都不复存在了。queue_list[]
里面的指针全是非法的。
如果想在栈上创建这些queue
,queue<int> queue_list[10]
就可以了。
迷茫2017-04-17 14:48:23
你这样写是在循环里重复声明,queue全是栈里的同一个对象。要 new 在堆上
#include <iostream>
#include <queue>
int main() {
std::queue<int>* queue_list[10];
for (int l = 0; l < 10; ++l) {
std::queue<int> *queue = new std::queue<int>;
queue_list[l] = queue;
}
for (int i = 0; i < 10; ++i) {
std::cout << queue_list[i] << std::endl;
}
}