У меня есть приоритетная очередь с элементами класса с именем A. Мне нужны элементы из этой очереди, которые могут быть ниже в очереди (уменьшают приоритет). Итак, я пытаюсь вытолкнуть несколько элементов, пока не получу элемент по своему выбору. Как только я получу элемент по своему выбору, я планирую отправить все элементы, которые я временно сохранил в массиве. У меня есть цикл, и для каждой итерации я иду дальше по очереди, чтобы проверить, является ли элемент, который я вытолкнул, моим выбором. Таким образом, у меня есть больше данных во временном массиве. Проблемы возникают, когда я пытаюсь отправить данные из этого временного массива обратно в очередь приоритетов. Базовым контейнером приоритета является вектор, и отладка показывает, что проблема в stl_queue.h со строкой std::push_heap(c.begin(), c.end(), comp); (с — вектор)
Я знаю, что это может быть неправильный способ сделать это, и мне, вероятно, следует использовать конструктор вместо malloc и иметь std: list вместо приоритетной очереди, но может ли кто-нибудь сообщить мне, что здесь происходит?
while(count < length_of_queue) // Iterate over all elements of queue
{
A* temp_array = (A *)malloc(count * sizeof(A));;
for (int i = 0;i<count;i++) // remove count number of elements from queue
{
temp_array[i] = priority queue.top();
priority queue.pop(); // free_list is the priority queue
}
A check_element = free_list.top(); // Check if (count+1)th elements satisfies our
// criteria
if (criteria_satisfied)
{
priority_queue.pop();
//freeing the temp_array and pushing back all the elements from temp_array into
// priority_queue like done in the else condition
return check_element;
}
else
{
for (int i = 0;i<count;i++) // Push back all the elements popped until now
{
priority_queue.push(temp_array[i]); // Offending line
}
free (temp_array);
}
count++
}
malloc
иfree
в программе на C++? Если на то пошло, почему вы вообще занимаетесь ручным управлением памятью? - person sbi   schedule 29.07.2010