Rust 在给定数值范围的引用上使用迭代器最有效的方法是什么?
一种方法是创建一个数组或向量(Rust 在给定数值范围的引用上使用迭代器最有效的方法是什么?,rust,Rust,一种方法是创建一个数组或向量([0,1,2,…,n],然后使用iter()方法。但是,它根本不节省内存 我尝试了以下实现: pub struct StaticIxIter { max: usize, current: usize, next: usize, } impl StaticIxIter { pub fn new(max: usize) -> Self { StaticIxIter { max,
[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);
}
}
对于迭代数字列表,您可能需要使用Rust 看看这个迭代器示例,其中使用了一个范围: 0..100中元素的
{
println!(“{}”,元素);
}
将其更改为0..max
也很好。如果要对其使用迭代器函数,请不要忘记将此范围括在括号中,如(0..100).map(…)
关于借用;对于借用迭代器项,您需要为它们指定一个所有者。我建议您的实现尽可能简单。为什么不在迭代迭代器项之后借用迭代器项,如下所示
0..100中元素的{
println!({},&元素);
//^-在这里借
}
听起来像是一个xy问题,为什么需要引用迭代器您可以使用范围语法在连续数字上创建迭代器:0..n
是一个迭代器,生成数字0
,1
,…,n-1
。如果您想要引用这些数字,首先需要拥有者——否则引用应该指什么呢?然而,我同意前面的评论,即生成引用而不是整数似乎没有什么用处。(无论如何,这里有一个例子。)如前所述,如果你想要引用,你必须有一个所有者。你的第一个想法是实现这一点的唯一方法:首先创建一个集合,然后对每个元素都有一个引用。你能回答这个问题吗?你为什么需要这个?你想解决什么问题?