当前位置: 首页 > 知识库问答 >
问题:

在Rust[重复]中有效复制相同向量的非重叠切片

季骏祥
2023-03-14

我有一个Vec

我想:

  • 避免使用不安全的函数,如std::ptr::copy\u非重叠
  • 使用库函数,而不用自己实现复制循环

我所尝试的:

#[test]
fn copy_within_a_vector() {
    let mut data = vec![1, 2, 0, 0];
    let src = &data[0..2];
    let mut dst = &mut data[3..4];
    dst.copy_from_slice(src);
}

这段代码甚至没有被编译,因为借用检查器抱怨同时借用可变和不可变的数据(这是正确的)。

是否可以重写代码以在稳定的环境下编译?

相关问题:

  • 在Rust中高效写入多个字节

共有1个答案

胡承悦
2023-03-14

如注释中所说,使用split_at_mut。然后可以使用clone_from_slice

实施示例

// split the slice in two mutable slices
// then copy one subslice to other
fn copy_within_a_slice<T: Clone>(v: &mut [T], from: usize, to: usize, len: usize) {
    if from > to {
        let (dst, src) = v.split_at_mut(from);
        dst[to..to + len].clone_from_slice(&src[..len]);
    } else {
        let (src, dst) = v.split_at_mut(to);
        dst[..len].clone_from_slice(&src[from..from + len]);
    }
}

fn main() {
    let mut v = (0..10).collect::<Vec<_>>();
    println!("{:?}", v);
    copy_within_a_slice(&mut v, 6, 1, 3);
    println!("{:?}", v);
}

输出:

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
[0, 6, 7, 8, 4, 5, 6, 7, 8, 9]

不要忘记注意这些值,因为如果超出范围,代码会死机。

 类似资料:
  • 错误:与“运算符”不匹配 我想同一个键和多个值,例如键是10值是2,3,4,但“*iter”是错误的..如何用c语言计算map,vector?

  • 已移除。[重复] ........ ..

  • 在C#中,我可以制作一个列表并向其添加不同类型的项。只要它们继承基类即可。例如: Rust不是面向对象编程语言,但我想知道是否可以实现类似的功能。有办法吗?

  • 我有一张3D医学图像。我使用获取连接的体素组。它非常快。但我还想得到每个标签的体素数量。我使用以下代码获取每个值的编号(假设是之后的数组)。大约2分钟。 有没有什么高效的方式来高效的获取呢?

  • 本文向大家介绍如何在R中创建具有重复值的向量?,包括了如何在R中创建具有重复值的向量?的使用技巧和注意事项,需要的朋友参考一下 有两种方法可以创建一个在R中具有重复值的向量,但是两种方法都有不同的方法,第一种方法是重复向量的每个元素,第二种方法将元素重复指定的次数。这两种方法都使用rep函数来创建向量。 示例 请看以下示例-

  • 我使用了这段代码来随机化1000000个数字而不重复。这是我目前所掌握的。 这种方法太慢了,你能告诉我如何更有效地完成这项工作吗?我感谢所有答复。问候