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

Класс Cow

Класс Cow (Clone-on-Write) - это перечисление из модуля std::borrow, которое может хранить либо заимствованные данные (Borrowed), либо владеемые данные (Owned). Основная идея заключается в том, что данные клонируются только тогда, когда требуется их изменить. Параметром тип Cow принимает тип, реализующий трейт ToOwned. Это позволяет эффективно работать с данными, избегая лишних аллокаций, когда изменения не требуются.

Синтаксис

enum Cow<'a, B> where B: 'a + ToOwned + ?Sized, { Borrowed(&'a B), Owned(<B as ToOwned>::Owned), }

Пример

Давайте создадим Cow с заимствованной строкой и выведем её на экран:

use std::borrow::Cow; fn main() { let s = "abcde"; let cow: Cow<str> = Cow::Borrowed(s); println!("{}", cow); }

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

"abcde"

Пример

Давайте создадим Cow с владеемой строкой и выведем её на экран:

use std::borrow::Cow; fn main() { let cow: Cow<str> = Cow::Owned(String::from("12345")); println!("{}", cow); }

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

"12345"

Пример

Давайте продемонстрируем клонирование при записи с помощью метода to_mut, который при необходимости создаёт владеемую копию:

use std::borrow::Cow; fn main() { let s = "abcde"; let mut cow: Cow<str> = Cow::Borrowed(s); cow.to_mut().push_str("fgh"); println!("{}", cow); }

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

"abcdefgh"

Пример

Давайте получим владеемую строку из Cow с помощью метода into_owned:

use std::borrow::Cow; fn main() { let s = "12345"; let cow: Cow<str> = Cow::Borrowed(s); let owned: String = cow.into_owned(); println!("{}", owned); }

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

"12345"

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

  • перечисление Borrowed,
    которое представляет заимствованный вариант Cow
  • перечисление Owned,
    которое представляет владеемый вариант Cow
  • метод to_owned,
    который создаёт владеемую копию данных
  • метод into_owned,
    который извлекает владеемые данные из Cow
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить