bunyk написав:Ні, скоріше для того щоб не навантажувати процесор створенням зайвих об’єктів, бо це займає час. Такий підхід називається "Ліниві обчислення".
Правильно лише частково - тоді, коли для обчислення кінцевого результату потрібні не всі значення списку/ітератора. Тоді непотрібні елементи можна й не обчислювати.
Якщо ж потрібно пройти по всьому списку, то вже немає різниці, обчислювати всі елементи зразу, чи тоді, коли вони реально використовуються. А от по пам'яті є різниця: список мусить висіти в пам'яті, поки обчислення не закінчаться, а при використанні ітератора можна видаляти попередній елемент перед створенням нового. Тобто при використанні списку ми матимемо O(n) і по часу, і по пам'яті, а при використанні ітератора - O(1) по пам'яті і в загальному випадку O(n) по часу.