Rust 如何转移字符串的所有权?

Rust 如何转移字符串的所有权?,rust,Rust,我是新生锈的人,曾几次遇到类似以下问题: fn main() { let mut as_str: Vec<&String> = Vec::new(); for i in [1, 2, 3, 4, 5].iter() { let i_str = i.to_string(); as_str.push(&i_str); } } fn main(){ 设mut为_str:Vec=Vec::new(); 对于[1,2,3

我是新生锈的人,曾几次遇到类似以下问题:

fn main() {
    let mut as_str: Vec<&String> = Vec::new();
    for i in [1, 2, 3, 4, 5].iter() {
        let i_str = i.to_string();
        as_str.push(&i_str);
    }
}
fn main(){
设mut为_str:Vec=Vec::new();
对于[1,2,3,4,5]中的i.iter(){
设i_str=i.to_string();
as_str.push(&i_str);
}
}
这将产生以下错误:

<anon>:6:22: 6:27 error: `i_str` does not live long enough
<anon>:6         as_str.push(&i_str);
                          ^~~~~
:6:22:6:27错误:'i_str'活得不够长
:6 as_str.push(&i_str);
^~~~~

如何将字符串的所有权转移到向量(不希望复制)?我需要一辈子吗?它应该是一个str还是一个字符串(假设我不想改变向量中的项目本身)?

给向量一个
字符串,而不是一个引用。拥有
Foo
,借用
&Foo

fn main() {
    let mut as_str: Vec<String> = Vec::new();
    for i in [1, 2, 3, 4, 5].iter() {
        let i_str = i.to_string();
        as_str.push(i_str);
    }
}
您可能会使用
map
将事物的一部分转换为另一部分:

fn main() {
    let as_str: Vec<_> = [1, 2, 3, 4, 5].iter().map(|i| i.to_string()).collect();
}
fn main(){
让as_str:Vec=[1,2,3,4,5].iter().map(|i | i.to_string()).collect();
}

顺便说一句,使用
&String
;您也可以使用
&str

来确保字符串被移动而不是复制,这样正确吗?是否必须显式地在Rust中复制(与C++不同)?
让as|str:Vec=(1..6)。map(|i | i.to_string()).collect()是实现OP的另一种方法。
fn main() {
    let as_str: Vec<_> = [1, 2, 3, 4, 5].iter().map(|i| i.to_string()).collect();
}