|
![]() |
#1 |
Участник
|
Цитата:
Сообщение от Gustav
![]() The only situation in which you cannot avoid using the iterator is when you must remove elements from a List collection. The following code shows how this is accomplished.
X++: List list = new List(Types::Integer); ListIterator iterator; ; list.addEnd(100); list.addEnd(200); list.addEnd(300); iterator = new ListIterator(list); while (iterator.more()) { if (iterator.value() == 200) iterator.delete(); iterator.next(); } print list.toString(); //{100, 300} pause; |
|
|
За это сообщение автора поблагодарили: Gustav (2). |
![]() |
#2 |
Moderator
|
На самом деле результат одинаков и так, и так (по крайней мере в 3.0 SP4). Думаю, что класс ListIterator всё сам корректно обрабатывает и не делает казалось бы лишний next для уже удаленного элемента.
Что касается визуального восприятия кода, то добавление else, на мой взгляд, затуманит наглядность, так как глаз привык к шаблону вида: X++: while (iterator.more()) { // bla-bla-bla iterator.next(); } Но в любом случае все претензии по данному фрагменту - авторам "Inside" ![]() |
|
![]() |
#3 |
Участник
|
Цитата:
В приведенном примере результат, разумеется, одинаков, но с итератором, стоящим на 300, в цикл мы никогда не попадаем. Цитата:
Но в любом случае все претензии по данному фрагменту - авторам "Inside"
![]() Последний раз редактировалось Hyper; 19.06.2008 в 13:15. |
|