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

问题描述 投票:0回答:3

如何使用

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

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

我可以填写什么(语法方面)来代替

???
字符?

vector rust
3个回答
13
投票

由于

Vec<T>
impls
From<[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 
                          // annotation if the compiler can infer it

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

let v = vec![10, 20, 30, 40];

6
投票

您还可以使用

to_vec
方法:

let a = [10, 20, 30, 40]; // a plain array
let v = a.to_vec(); 

游乐场

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

Clone


2
投票

我是 Rust 新手。

我认为这个问题来自rusdlings /练习/vecs,有助于理解rust的基本语法。

fn array_and_vec() -> ([i32; 4], Vec<i32>) {
    let a = [10, 20, 30, 40]; // a plain array
    let v = // TODO: declare your vector here with the macro for vectors

    (a, v)
}

当我尝试解决这个问题时,我搜索是否有一种方法可以枚举现有数组中的所有元素,并通过使用 vec! 宏来构造向量。 使用Vec::from很容易。然而,它不是宏,而是一个函数。 或者练习没有意义?

© www.soinside.com 2019 - 2024. All rights reserved.