如何初始化向量数组?

Wim*_*m V 25 rust

我想创建一个这样的矢量数组

let v: [Vec<u8>; 10] = [Vec::new(); 10];
Run Code Online (Sandbox Code Playgroud)

但是,编译器给了我这个错误:

错误:core::kinds::Copy该类型没有实现特征collections::vec::Vec<u8>

Chr*_*gan 13

你不能使用[expr; N]初始化语法非Copy类型,因为锈病的所有权模式,一次只执行的表达,而对于非Copy类型不能只是复制的字节数的N倍,所以一定要在只有一个地方拥有.

你需要:

  1. 明确地写出十次:let v: [Vec<u8>; 10] = [vec![], vec![], vec![], vec![], vec![], vec![], vec![], vec![], vec![], vec![]]

  2. 使用像向量而不是数组的东西:std::iter::repeat(vec![]).take(10).collect::<Vec<_>>().

  • 差不多一年后了.当然有一个*好的方法来做到这一点? (4认同)
  • “ Copy”是关于一种数据类型,该数据类型精确地由其字节表示,因此仅复制字节就足以复制该值。这对`Vec`无效,因为实际数据存储在丰富的堆分配中,必须是唯一拥有的。Vec的内存副本将违反内存安全性。 (3认同)
  • 我在处理256个向量数组时遇到了同样的问题:( (2认同)

小智 6

您可以使用Default特征来使用默认值初始化数组:

let array: [Vec<u8>; 10] = Default::default();
Run Code Online (Sandbox Code Playgroud)

有关工作示例,请参见此游乐场

  • 这仅适用于`[Vec &lt;T&gt;; N],其中N等于32,因为Rust仅对大小为0到32(含0)(包括32和更大)的array实施default属性。 (4认同)