Нет никаких гарантий относительно состояния итератора после того, как вы вызовете take
для него.
Проблема с итераторами заключается в том, что многие полезные операции могут быть реализованы только при возникновении побочных эффектов. Все эти операции имеют указанный прямой эффект, но могут также иметь побочные эффекты, которые не могут быть указаны (или могут усложнить реализацию).
В случае take
существуют реализации, которые клонируют внутреннее состояние итератора, и другие, которые продвигают итератор. Если вы хотите гарантировать отсутствие побочных эффектов, вам придется использовать неизменяемые структуры данных, в любом другом случае ваш код должен полагаться только на прямые эффекты.