gpt4 book ai didi

iterator - 是否有提供 `iter()` 的特征?

转载 作者:行者123 更新时间:2023-11-29 07:47:40 28 4
gpt4 key购买 nike

Rust 中是否有提供 iter() 的 Trait方法?我只找到了特征 IntoIterator ,供应into_iter() .

这里要明确一点:我不想要 Iterator特性,提供 next() , 但提供 iter() 的特性.

[ 旁注:有时我对 Rust 库感到很困惑。 Iterator耗材next() ,但是IntoIterator耗材into_iter() (不提供 next() 和移动约定),而 IntoIter是一个结构,它实现了 Iterator特征(移动值)。 ]

最佳答案

不,没有提供 iter() 的特征.

然而,IntoIterator在对某些容器的引用 上实现。例如, Vec<T> , &Vec<T> and &mut Vec<T> 是实现 IntoIterator 的三种独立类型,您会注意到它们都映射到不同的迭代器。事实上,Vec::iter()Vec::iter_mut()只是等同于 &Vec::into_iter() 的便捷方法和 &mut Vec::into_iter()分别。

fn foo(_x: std::slice::Iter<i32>) {}

fn main() {
let v = vec![1, 2, 3];
foo(v.iter());
foo((&v).into_iter()); // iter() exists because this is awkward
}

如果你想写一个对容器通用的函数,它可以转换成迭代引用的迭代器,你可以这样做:

fn foo<'a, I: IntoIterator<Item=&'a i32>>(_x: I) {}

fn main() {
let v = vec![1, 2, 3];
foo(&v);
}

关于iterator - 是否有提供 `iter()` 的特征?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39675949/

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