如何在整数 Vec 前面加上零?

api*_*lat 2 vector rust

我想在 a 的开头插入几个零Vec<u64>。我可以做到的一种方法是:

for _ in 0..to_insert {
    vec.insert(0, 0);
}
Run Code Online (Sandbox Code Playgroud)

据我从实现中可以看出,这会在每次迭代中复制整个向量。

如果不需要(最好在安全的 Rust 中),我正在寻找一种方法来有效地插入这些零,而无需重新分配向量。我尝试了下面的代码,但它失败了,因为vec被借用了两次。

fn main() {
    let mut vec = vec![1, 2, 3];
    let to_insert = 2;

    vec.resize(vec.len() + to_insert, 0);
    &mut vec[to_insert..vec.len()].copy_from_slice(&vec[0..vec.len()-to_insert]);

    assert_eq!(vec, vec![0, 0, 1, 2, 3]);
}
Run Code Online (Sandbox Code Playgroud)

Kit*_*tsu 5

rotate_left/rotate_right可能是一个解决方案(操场):

let mut v = vec![1, 2, 3];

v.extend(std::iter::repeat(0).take(to_insert)); // now it's [1,2,3,0,0,..]
// vec.extend(&[0; to_insert]); // also works as a less flexible version (requires a const to_insert)
v.rotate_right(to_insert); // then it becomes [0,0,...,0,1,2,3]
Run Code Online (Sandbox Code Playgroud)