我想在 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)
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)