int a[1] = {counter};
q.push(a);
Не правильно. Он вызывает неопределенный behvaiour, так как a
не существует вне фигурных скобок (блок for-loop). Даже если он был четко определен, у вашего кода есть другая проблема, все элементы в queue
одинаковы, так как a
(одна и та же память) многократно используется в цикле.
Решение таково:
int *a = new int[1];
a[0] = counter;
q.push(a);
Если вы это сделаете, то вам, конечно, придется самостоятельно освободить память.
Но мне интересно, если каждый элемент в queue
является только одним int
, то почему бы не использовать следующее:
queue<int> q;
for (int i = 0; i < 3; i++)
{
q.push(counter);
counter++;
}
Или, если вы действительно хотите массив, то почему бы не использовать std::queue<std::vector<int> >
как:
std::queue<std::vector<int> > q;
for (int i = 0; i < 3; i++)
{
std::vector<int> v;
v.push_back(counter);
q.push(v); //dont worry - a copy of the vector is being pushed!
counter++;
}
Таким образом, вам не нужно иметь дело с необработанными указателями. Вам не нужно выделять или освобождать память самостоятельно, что, на мой взгляд, является безопасным подходом!