Как инициализировать массив векторов?

Я хотел бы создать массив таких векторов, как этот

let v: [Vec<u8>; 10] = [Vec::new(); 10];

Однако компилятор дает мне эту ошибку:

ошибка: признак core::kinds::Copy не реализован для типа collections::vec::Vec<u8>

Ответы

Ответ 1

Вы не можете использовать синтаксис инициализации [expr; N] для типов Copy из-за модели владения Rusts - он выполняет одно только одно выражение, а для типов Copy он не может просто скопировать байты N раз, они должны принадлежать только в одном месте.

Вам понадобится:

  • Запишите его явно десять раз: let v: [Vec<u8>; 10] = [vec![], vec![], vec![], vec![], vec![], vec![], vec![], vec![], vec![], vec![]] или

  • Используйте что-то вроде вектора вместо массива: std::iter::repeat(vec![]).take(10).collect::<Vec<_>>().

Ответ 2

Вы можете использовать черту Default для инициализации массива значениями по умолчанию:

let array: [Vec<u8>; 10] = Default::default();

Смотрите эту площадку для рабочего примера.