Вопрос о применении указателей, и это делает цикл бесконечным

Двоичные кучи - эффективный способ реализации очередей приоритетов. Единственная гарантия порядка, которую делает куча, состоит в том, что элемент наверху имеет наивысший приоритет (возможно, это «самый большой» или «самый маленький» в соответствии с каким-то порядком). Куча - это двоичное дерево, обладающее свойствами: Свойство Shape: дерево заполняется сверху вниз слева направо. Order prperty: элемент на любом узле больше (или меньше, если наименьший имеет наивысший приоритет), чем его два дочерних узла. Когда итератор посещает все элементы, он, вероятно, делает это в обход уровня, то есть он посещает каждый узел на каждом уровне, прежде чем перейти на следующий уровень. Поскольку единственная гарантия порядка, заключающаяся в том, что узел имеет более высокий приоритет, чем его дочерние элементы, узлы на каждом уровне не будут иметь особого порядка.

0
задан DrewDrewDrew 18 January 2019 в 12:55
поделиться

1 ответ

Я не совсем понимаю, к каким указателям или управлению памятью вы обращаетесь. Однако это

cin >> a[1000];

неверно. Массив с 1000 элементами имеет последний действительный индекс как 999. Вы получаете доступ к массиву за пределами, что вызывает неопределенное поведение. Может случиться что угодно (ну, не совсем, но лучше так об этом думать).

Правильный цикл должен быть («правильный» как в «минимальных изменениях, чтобы избежать уб»):

for(int h = 0;h < g; h++){
    cout << "  Input number: ";
    cin >> a[h];
}

Однако, это также вызовет проблемы, когда пользователь вводит число больше чем 1000 для g. Что вы действительно должны использовать, так это std::vector, который позволяет вам выдвигать элементы сколько угодно, не указывая их размер во время компиляции.

PS: Если ваш код работает без указателей или ручного управления памятью, то нет причин добавлять его. Указатели и (ручное) управление памятью сложны, обучение тому, как с ними обращаться, в основном сводится к тому, как их избежать.

0
ответ дан user463035818 18 January 2019 в 12:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: