gpt4 book ai didi

iterator - 为什么有两种迭代向量的方法,IntoIterator 和 Iter?

转载 作者:行者123 更新时间:2023-11-29 08:25:26 25 4
gpt4 key购买 nike

我有这个例子:

struct Foo { data: Vec<u32> }
impl Foo {
fn get_list(&self) -> &Vec<u32> {
&self.data
}
}

fn main() {
let foo = Foo { data: vec![1, 2, 3] };

// 1
for it in foo.get_list() {
println!("IntoIter {}", *it);
}

// 2
for it in foo.get_list().iter() {
println!("Iter {}", *it);
}
}

据我了解,情况(1) &Vec 转换为IntoIterator,在情况 (2) 中,我们只使用 Iter

  1. 这些情况在潜在性能(编译器在优化模式下可以做什么)方面是否相等?

  2. 如果情况相等,为什么要引入 IntoIterator?难道只是为了避免写.iter()吗?

最佳答案

在这种情况下它们是等价的,因为 get_list 返回一个引用,所以 IntoIteratoriter 都获取一个向量的引用并返回对项目的引用。

如果向量被拥有,它将被移动到 IntoIterator(因此得名)并从向量中返回拥有的项目。另一方面,iter 总是接受一个引用并返回对项目的引用。

另见 this answer .

关于iterator - 为什么有两种迭代向量的方法,IntoIterator 和 Iter?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38930635/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com