我想将数组的一个切片上的值复制到另一个切片上.

显而易见的方法(使用迭代)是:

for i in 0..10 {
    self.ram[i] = self.ram[20 + i];
}

然而,这似乎效率很低.

复制切片的常用方法:

arr[0..10].copy_from_slice(&arr[20..30]);

因为arr被借了两次,所以不起作用.

我想到的唯一其他方法是std::ptr::copy_nonoverlapping,这是不安全的.

将切片复制到自己的数组中(同时知道源和目标不重叠)的最佳方法是什么?

推荐答案

使用copy_within():

arr.copy_within(20..30, 0);

请注意,这并不要求它们不重叠.

如果您确定它们没有重叠,并且希望利用这些重叠,则可以使用不安全代码:

let p = arr.as_mut_ptr();
unsafe {
    std::ptr::copy_nonoverlapping(p.add(20), p, 10);
}

Rust相关问答推荐

有条件默认实现

为什么函数不接受选项T参数的所有权?

borrow 和内部IntoIterator

如何在原始字符串中转义";#和#";

如何处理动态 struct 实例化?

有没有办法避免在While循环中多次borrow `*分支`

使用铁 rust S还原对多个数组执行顺序kronecker积

如何正确重新排列代码以绕过铁 rust 借入判断器?

我们能确定Rust会优化掉Clone()吗?如果它会立即掉落?

类型生命周期绑定的目的是什么?

为什么某些类型参数仅在特征边界中使用的代码在没有 PhantomData 的情况下进行编译?

如何处理闭包中的生命周期以及作为参数和返回类型的闭包?

sha256 摘要仅适用于 &*

Rust 中指向自身的引用如何工作?

Rust 打包在 .deb 中

Rust 程序中的内存泄漏

错误:将自定义 proc_macro 与用Rust 的宝贝编写的属性一起使用时,无法在此范围内找到属性

从 Axum IntoResponse 获取请求标头

当我不满足特征界限时会发生什么?

提取 struct 生成宏中字段出现的索引