gpt4 book ai didi

loops - 循环时,.iter() 与引用 (&) 有何不同?

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

在使用 Rust 时,我发现您可以通过引用遍历 VecHashMap(可能还有其他),而不是使用 .iter ()

let xs = vec![1, 2, 3, 4, 5];
for x in &xs {
println!("x == {}", x);
}

.iter() 函数似乎具有相同的行为。

let xs = vec![1, 2, 3, 4, 5];
for x in xs.iter() {
println!("x == {}", x);
}

这两种遍历集合的方法在功能上是否相同,或者两者的行为方式之间是否存在细微差别?我注意到 .iter() 似乎是我发现的示例中普遍首选的方法。

最佳答案

Are both methods of looping over a collection functionally identical

是的,它们是相同的。

The implementation of IntoIterator for &Vec<T> :

impl<'a, T> IntoIterator for &'a Vec<T> {
type Item = &'a T;
type IntoIter = slice::Iter<'a, T>;

fn into_iter(self) -> slice::Iter<'a, T> {
self.iter()
}
}

The implementation of IntoIterator for &HashMap<K, V, S> :

impl<'a, K, V, S> IntoIterator for &'a HashMap<K, V, S>
where K: Eq + Hash, S: HashState
{
type Item = (&'a K, &'a V);
type IntoIter = Iter<'a, K, V>;

fn into_iter(self) -> Iter<'a, K, V> {
self.iter()
}
}

请注意,两者都只调用 iter() .

I notice that .iter() seems to be the universally preferred approach in examples that I've found.

我使用 collection.iter()每当我想使用迭代器适配器时,我都会使用 &collection每当我想直接迭代集合时。

关于loops - 循环时,.iter() 与引用 (&) 有何不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36603260/

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