如何将我的 Vec 发送到以 Iterator 作为参数的函数?

How can I send my Vec to a function taking an Iterator as a parameter?

我有一个问题,我有一个接受特定结构类型的 Iterator 的函数,我想发送包含相同结构类型作为参数的 Vector函数。

我不明白我做错了什么。我尝试了几种不同的方法:

我不知道如何将 Vec 作为 Iterator 发送到函数。

pub struct MyStruct {
    pub dataA: f32,
    pub dataB: f32,
}

struct MyProgram {
    my_structs: Vec<MyStruct>,
}

pub trait BaseFunctions {
    fn new() -> Self;
    fn run(&mut self);
}

impl BaseFunctions for MyProgram {
    fn new() -> Self {

        //Create some data
        let mut vec = Vec::new();
        for x in 0..5 {
            vec.push(MyStruct{
                dataA: 1.0,
                dataB: 1.0,
            });
        }

        Self {
            my_structs: vec,
        }
    }

    fn run(&mut self) {

        my_func(
            self.my_structs.into_iter(),
        );
    }
}

pub fn my_func<Iter>(iter: Iter)
where
    Iter: Iterator<Item = MyStruct>, {
        for i in iter {
            // Do something
        }
}


fn main() {
    let mut program = MyProgram::new();
    program.run();
}

您的问题是 iter() 生成一个 Iterator 引用而不是值。所以你需要有一个参考和你的功能的生命周期。最好在 IntoIterator 上进行限制,这样可以更通用。

pub fn my_func<'a, Iter>(iter: Iter)
where
    Iter: IntoIterator<Item = &'a MyStruct>,
{
    for i in iter {
        // Do something
    }
}

像这样调用my_func(&self.my_structs);my_func(self.my_structs.iter());