gpt4 book ai didi

rust - 在给定数字范围的引用上使用迭代器的最有效方法是什么?

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

这样做的一种方法是创建一个数组或向量 ([0, 1, 2, ..., n] 然后使用 iter()方法。但是,它根本没有内存效率。

我尝试了以下实现:

pub struct StaticIxIter {
max: usize,
current: usize,
next: usize,
}

impl StaticIxIter {
pub fn new(max: usize) -> Self {
StaticIxIter {
max,
current: 0,
next: 0,
}
}
}

impl Iterator for StaticIxIter {
type Item = &usize;

fn next(&mut self) -> Option<Self::Item> {
if self.next >= self.max {
return None;
}
self.current = self.next;
self.next += 1;
Some(&self.current)
}
}

fn main() {
for element in StaticIxIter::new(10) {
println!("{}", element);
}
}

它不会编译:

error[E0106]: missing lifetime specifier
--> src/main.rs:18:17
|
18 | type Item = &usize;
| ^ expected lifetime parameter

最佳答案

要遍历数字列表,您可能需要使用 Rust 的 range iterator .

看看这个迭代器示例,其中使用了一个范围:

for element in 0..100 {
println!("{}", element);
}

将其更改为 0..max 也完全没问题。如果您想在其上使用迭代器函数,请不要忘记将此范围括在方括号之间,例如 (0..100).map(...)

关于借用;要借用迭代器项,您需要为它们指定一个所有者。我建议让您的实现尽可能简单。为什么不在迭代后借用迭代器项,就像这样?

for element in 0..100 {
println!("{}", &element);
// ^- borrow here
}

关于rust - 在给定数字范围的引用上使用迭代器的最有效方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48180428/

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