使用 vec 初始化向量!宏并用现有数组中的值填充它

TDi*_*lik 9 vector rust

如何使用vec!宏初始化新的 Vector 并自动用现有数组中的值填充它?这是代码示例:

let a = [10, 20, 30, 40]; // a plain array
let v = vec![??];       // TODO: declare your vector here with the macro for vectors
Run Code Online (Sandbox Code Playgroud)

我可以填写什么(语法方面)而不是???字符?

Cha*_*man 11

由于Vec<T>implsFrom<[T; N]>From::from() ,它可以通过使用方法或方法从数组创建Into::into()

let v = Vec::from(a);
// Or
let v: Vec<_> = a.into(); // Sometimes you can get rid of the type annoation if the compiler can infer it
Run Code Online (Sandbox Code Playgroud)

vec![]宏不是为此目的而设计的;它旨在Vec从头开始创建 s,例如数组文字。您可以使用宏,而不是创建数组并转换它vec![]

let v = vec![10, 20, 30, 40];
Run Code Online (Sandbox Code Playgroud)


Net*_*ave 6

您还可以使用以下to_vec方法:

let a = [10, 20, 30, 40]; // a plain array
let v = a.to_vec(); 
Run Code Online (Sandbox Code Playgroud)

操场

根据注释,请注意它克隆了元素,因此向量项应该实现Clone.

  • 当它工作时,它会克隆元素,这意味着冗余副本+“T:克隆”要求。这是因为此方法对切片而不是数组进行操作。 (2认同)