首页 > 解决方案 > SplMinHeap 或 SplMaxHeap 是否在逻辑上实现 Traversable 接口?

问题描述

我注意到SplMinHeaporSplMaxHeap实现了Iterator接口,它实现了Traversable接口,所以我可以使用iterator_to_array (Traversable $iterator) : arrayorforeach语法来迭代这两个类的任何实例。

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

是的,我们可以像声明的类一样遍历/迭代这个数据结构,但只能遍历一次。合乎逻辑吗?

标签: phpheapspl

解决方案


推荐阅读