当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Rust slice.copy_from_slice用法及代码示例


本文简要介绍rust语言中 slice.copy_from_slice 的用法。

用法

pub fn copy_from_slice(&mut self, src: &[T]) where    T: Copy,

使用 memcpy 将 src 中的所有元素复制到 self 中。

src 的长度必须与 self 相同。

如果 T 未实现 Copy ,请使用 clone_from_slice

Panics

如果两个切片的长度不同,此函数将出现Panics。

例子

将切片中的两个元素复制到另一个:

let src = [1, 2, 3, 4];
let mut dst = [0, 0];

// Because the slices have to be the same length,
// we slice the source slice from four elements
// to two. It will panic if we don't do this.
dst.copy_from_slice(&src[2..]);

assert_eq!(src, [1, 2, 3, 4]);
assert_eq!(dst, [3, 4]);

Rust 强制在特定范围内只能有一个可变引用,而没有对特定数据的不可变引用。因此,尝试在单个切片上使用 copy_from_slice 将导致编译失败:

let mut slice = [1, 2, 3, 4, 5];

slice[..2].copy_from_slice(&slice[3..]); // compile fail!

为了解决这个问题,我们可以使用 split_at_mut 从切片中创建两个不同的 sub-slices:

let mut slice = [1, 2, 3, 4, 5];

{
    let (left, right) = slice.split_at_mut(2);
    left.copy_from_slice(&right[1..]);
}

assert_eq!(slice, [4, 5, 3, 4, 5]);

相关用法


注:本文由纯净天空筛选整理自rust-lang.org大神的英文原创作品 slice.copy_from_slice。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。