覚書なんで本当にmemo程度。
<?php // とりあえず作る $obj = new SplMaxHeap(); var_dump($obj->isEmpty()); var_dump(count($obj)); // 普通にforeach test for($i = 0; $i < 20; $i ++) { $obj->insert(rand(0, 100)); } var_dump($obj->isEmpty()); var_dump(count($obj)); foreach($obj as $key => $val) { print "{$key} => {$val}\n"; } var_dump($obj->isEmpty()); var_dump(count($obj)); // extractを使うやり方 test for($i = 0; $i < 20; $i ++) { $obj->insert(rand(0, 100)); } while($obj->valid()) { var_dump( $obj->extract() ); } var_dump($obj->isEmpty()); var_dump(count($obj)); // key取得して配列アクセス test for($i = 0; $i < 20; $i ++) { $obj->insert(rand(0, 100)); } while($obj->valid()) { var_dump($obj[$obj->key()]); $obj->next(); } var_dump($obj->isEmpty()); var_dump(count($obj));
最後の配列アクセスは
Fatal error: Cannot use object of type SplMaxHeap as array in /home/furu/t.php on line
でエラー。 ArrayAccess を継承してないんだねぇ。継承させたの作ったらそれはそれで便利そうな気がせんでもないが。
foreachした後、isEmptyがtrueになる点に注意。
&
while条件、valid使ってるけど、何となくisEmptyつかって「false === isEmpty」のほうがわかりやすいだろうか? とか微妙に思案。