РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
682 of 1245 menu

Трейт ExactSizeIterator

Трейт ExactSizeIterator является расширением трейта Iterator и гарантирует, что итератор знает своё точное количество элементов. Он предоставляет метод len, который возвращает точное число оставшихся элементов без необходимости перебирать итератор. Трейт не имеет собственных параметров, но требует, чтобы метод size_hint возвращал одинаковые значения для нижней и верхней границы, то есть точное количество элементов.

Синтаксис

impl ExactSizeIterator for MyIterator { fn len(&self) -> usize }

Пример

Давайте получим точное количество элементов вектора vec![1, 2, 3, 4, 5] с помощью метода len:

fn main() { let v = vec![1, 2, 3, 4, 5]; let iter = v.iter(); let res = iter.len(); println!("{}", res); }

Результат выполнения кода:

5

Пример

Давайте проверим, что после вызова take итератор всё ещё реализует трейт ExactSizeIterator и возвращает корректную длину:

fn main() { let v = vec![1, 2, 3, 4, 5]; let mut iter = v.iter().take(3); let res = iter.len(); println!("{}", res); iter.next(); let res2 = iter.len(); println!("{}", res2); }

Результат выполнения кода:

3 2

Пример

Давайте убедимся, что ExactSizeIterator позволяет безопасно использовать метод len вместе с rev:

fn main() { let v = vec![1, 2, 3, 4, 5]; let iter = v.iter().rev(); let res = iter.len(); println!("{}", res); }

Результат выполнения кода:

5

Смотрите также

  • трейт Iterator,
    который является базовым трейтом для всех итераторов
  • метод size_hint,
    который возвращает границы количества оставшихся элементов
  • трейт DoubleEndedIterator,
    который позволяет перебирать элементы с обоих концов
  • метод count,
    который подсчитывает количество элементов в итераторе
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить