#php #heap #spl
#php #куча #spl
Вопрос:
Я заметил, что SplMinHeap
or SplMaxHeap
реализует Iterator
интерфейс, который реализует Traversable
интерфейс, поэтому я могу использовать iterator_to_array (Traversable $iterator) : array
foreach
синтаксис or для итерации любого экземпляра этих двух классов.
SplMaxHeap extends SplHeap implements Iterator , Countable {
SplMinHeap extends SplHeap implements Iterator , Countable {
Но когда я повторяю экземпляр SplMinHeap / SplMaxHeap повторно, я получаю пустой массив после первой итерации. Похоже, что первая итерация нарушила внутреннюю структуру SplMinHeap / SplMaxHeap .
<?php
$minHeap = new SplMinHeap();
$minHeap->insert(15);
$minHeap->insert(5);
$minHeap->insert(10);
foreach ($minHeap as $val) echo $val, PHP_EOL;
var_dump(iterator_to_array($minHeap)); // empty array
var_dump(iterator_to_array($minHeap)); // empty array
Да, мы можем проходить / повторять эту структуру данных как объявленный ее класс, но только один раз. Логично ли это?
Комментарии:
1. Да, я думаю, что это логично. Когда вы пытаетесь перебирать значения кучи, вероятно, он извлекает значение, которое означает удаление значения после использования. sitepoint.com/data-structures-3