Реализуют ли SplMinHeap или SplMaxHeap логически проходимый интерфейс?

#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