// 定义一个斐波那契数列的迭代器
struct Fibonacci {
a: u64,
b: u64,
}
impl Fibonacci {
fn new() -> Fibonacci {
Fibonacci { a: 0, b: 1 }
}
}
impl Iterator for Fibonacci {
type Item = u64;
fn next(&mut self) -> Option<Self::Item> {
let result = Some(self.a);
let new_b = self.a + self.b;
self.a = self.b;
self.b = new_b;
result
}
}
fn main() {
// 获取前10个斐波那契数的和
let sum_of_first_10 = Fibonacci::new()
.take(10)
.fold(0, |acc, num| acc + num);
println!("前10个斐波那契数的和: {}", sum_of_first_10);
// 跳过前5个斐波那契数,然后取接下来的3个
let skipped_and_taken = Fibonacci::new()
.skip(5)
.take(3)
.collect::<Vec<u64>>();
println!("跳过前5个然后取3个: {:?}", skipped_and_taken);
}
- 自定义斐波那契迭代器:
- 定义
Fibonacci
结构体,它包含两个u64
类型的字段a
和b
,分别表示斐波那契数列中的当前值和下一个值。
new
方法用于初始化迭代器,将a
设为0,b
设为1。
- 实现
Iterator
trait,next
方法返回当前的斐波那契数,并更新a
和b
为下一对值。
- 与迭代器适配器协同工作:
take
:take(10)
用于获取前10个斐波那契数。
skip
:skip(5)
用于跳过前5个斐波那契数。
fold
:fold(0, |acc, num| acc + num)
用于对迭代器中的值进行累加,从而得到前10个斐波那契数的和。