• 【Rust】trait迭代器


    环境

    • Rust 1.56.1
    • VSCode 1.61.2

    概念

    参考:https://doc.rust-lang.org/rust-by-example/trait/iter.html

    示例

    区间手动迭代

    fn main() {
        // `0..3` is an `Iterator` that generates: 0, 1, and 2.
        let mut sequence = 0..3;
    
        println!("Four consecutive `next` calls on 0..3");
        println!("> {:?}", sequence.next());
        println!("> {:?}", sequence.next());
        println!("> {:?}", sequence.next());
        println!("> {:?}", sequence.next());
    }
    

    区间自动迭代

    fn main() {
        println!("Iterate through 0..3 using `for`");
        for i in 0..3 {
            println!("> {}", i);
        }
    }
    

    Fibonacci

    struct Fibonacci {
        curr: u32,
        next: u32,
    }
    
    impl Iterator for Fibonacci {
        type Item = u32;
    
        fn next(&mut self) -> Option<Self::Item> {
            let new_next = self.curr + self.next;
    
            self.curr = self.next;
            self.next = new_next;
    
            Some(self.curr)
        }
    }
    
    fn fibonacci() -> Fibonacci {
        Fibonacci { curr: 0, next: 1 }
    }
    
    fn main() {
        // take 限制迭代次数
        println!("The first four terms of the Fibonacci sequence are: ");
        for i in fibonacci().take(4) {
            println!("> {}", i);
        }
    
        // skip 跳过迭代次数
        println!("The next four terms of the Fibonacci sequence are: ");
        for i in fibonacci().skip(4).take(4) {
            println!("> {}", i);
        }
    }
    

    数组迭代

    fn main() {
        let array = [1u32, 3, 3, 7];
        println!("Iterate the following array {:?}", &array);
        for i in array.iter() {
            println!("> {}", i);
        }
    }
    

    总结

    了解了 Rust 中的迭代器,可以通过 for 循环来遍历迭代器。

    附录

  • 相关阅读:
    [BZOJ3105][CQOI2013]新Nim游戏
    [BZOJ4592][SHOI2015]脑洞治疗仪
    [BZOJ3551][ONTAK2010]Peaks加强版
    [BZOJ2229][ZJOI2011]最小割
    [BZOJ4519][CQOI2016]不同的最小割
    [BZOJ3532][SDOI2014]LIS
    [BZOJ2668][CQOI2012]交换棋子
    [BZOJ3504][CQOI2014]危桥
    Java抽象类
    Java方法覆盖重写
  • 原文地址:https://www.cnblogs.com/jiangbo44/p/15726660.html
Copyright © 2020-2023  润新知