Vector 初始化Rust中的向量向量

Vector 初始化Rust中的向量向量,vector,syntax,rust,initialization,Vector,Syntax,Rust,Initialization,我试图创建一个简单的多色mandelbrot生成器,扩展了O'Reilly的编程示例。其想法是创建三个不同的灰色贴图平面,其逃逸速度略有不同,然后将它们合并到RGB风格的彩色贴图图像中。其主要思想是每个平面都是独立的,因此每个平面都可以通过使用横梁板条箱的单独螺纹进行加工,这是最终目标 问题是我似乎无法将我的平面矢量化。让我告诉你: pub struct Plane { bounds: (usize, usize), velocity: u8, region: Vec&l

我试图创建一个简单的多色mandelbrot生成器,扩展了O'Reilly的编程示例。其想法是创建三个不同的灰色贴图平面,其逃逸速度略有不同,然后将它们合并到RGB风格的彩色贴图图像中。其主要思想是每个平面都是独立的,因此每个平面都可以通过使用横梁板条箱的单独螺纹进行加工,这是最终目标

问题是我似乎无法将我的平面矢量化。让我告诉你:

pub struct Plane {
    bounds: (usize, usize),
    velocity: u8,
    region: Vec<u16>,
}

impl Plane {
    pub fn new(width: usize, height: usize, velocity: u8) -> Plane {
        Plane {
            bounds: (width, height),
            velocity: velocity,
            region: vec![0 as u16; width * height],
        }
    }
}

pub fn main() {
    // ... argument processing elided
    let width = 1000;
    let height = 1000;
    let velocity = 10;
    let planes = vec![Plane::new(width, height, velocity); 4]; // RGBa
}
我曾尝试创建一个巨大的平面,然后用chunks_mut将其切分为子平面,然后将引用传递给底层数组,但它给了我:

地区:&'[u16]:此字段不实现“复制” 据我所知,我不是在复制平面对象,而是vec![]宏希望将其移动到某个位置,必须为其实现复制,但在此范围内,我只希望移动数组的句柄,而不是数据,对吗?这只是一个位图本身,它不应该已经实现了复制吗

这在单个平面上可以很好地工作,即使该平面被分割为多核处理区域(参见示例),但在这种情况下,一个巨大的平面存在于父函数中,并且仅将其切片传递给渲染器

是否有办法将平面数据数组移动到结构中以进行适当封装?

Vec构造宏要求元素类型实现克隆,以便将示例元素复制到其余插槽中。因此,简单的解决方法是让Plane实现克隆:


您的代码还有很多其他错误,这表明您在没有测试的情况下输入了代码。在修复这些错误之后,我看到了一个不同但听起来相似的错误:trait-bound-Plane:std::clone::clone`不满足`向量构造语法vec![val;4]要求类型实现克隆。这样它就可以复制它以供输入。你可以让Plane实现克隆,也可以用另一种方式填充向量——例如,从迭代器中收集。我相信你的问题可以用的答案来回答。如果你不同意,请用你的问题来解释不同之处。否则,我们可以将这个问题标记为已回答。我也同意建议的问题不是很有用,但这里仍然有太多问题无法确定。为什么不向我们展示产生第二个错误的代码?此外,标题可能会误导我们:如果您希望多个平面包含一个切片到一个向量,那么从技术上讲,您将拥有一个切片向量。
#[derive(Clone)]
pub struct Plane {
    bounds: (usize, usize),
    velocity: u8,
    region: Vec<u16>,
}
use std::iter;
let planes: Vec<_> = iter::repeat_with(|| Plane::new(width, height, velocity))
    .take(4)
    .collect();