У меня возникли две непредвиденные проблемы с использованием очереди из библиотеки STL:
1) Я пытаюсь очистить очередь (в очереди нет функции очистки), но интуитивно понятный способ дает мнеОСНОВНОЙ ДАМП:
//The queue is defined Globally but the problem happens even
//if i define it locally and pass it by reference.
queue<pair<int,int> > Q;
void yadayada ()
{
//initialize Q
while (!Q.empty())
Q.pop(); //CORE DUMP, what the hell?
}
2) Когда я печатаю элемент (пару) с фронта очереди, он ошибочно печатается как (0,0).Но когда я использую элемент (возвращая второй элемент в паре), это правильно!
int yadayada2(...)
{
//code...code...code
//the element in front is (4,20)
front = Q.front(); Q.pop();
cout << "(" << front.first << "," << front.second << ")" << endl;
//prints: (0,0)
//what the hell?
//correctly returns 20
return front.second;
}
int main()
{
//code...code...code
//prints 20!
cout << yadayada2 << endl;
}
Я думаю: «Возможно, pop отменяет действие элемента (не имеет смысла, но ...), поэтому япереместил Q.pop (); непосредственно перед возвратом. Но то же самое все еще происходит ...