Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vector 如何将零前置到整数的向量?_Vector_Rust - Fatal编程技术网

Vector 如何将零前置到整数的向量?

Vector 如何将零前置到整数的向量?,vector,rust,Vector,Rust,我想在Vec的开头插入几个零。我可以这样做的一个方法是: 用于0中的u..to_插入{ 向量插入(0,0); } 据我所知,这会在每次迭代中复制整个向量 我正在寻找一种方法,在没有必要的情况下(最好是在安全的情况下)有效地插入这些零,而不重新分配向量。 我尝试了下面的代码,但失败了,因为vec被借用了两次 fn main(){ 让mut-vec=vec![1,2,3]; 设to_insert=2; 调整向量大小(向量长度()+插入,0); &mut vec[to_insert..vec.len

我想在
Vec
的开头插入几个零。我可以这样做的一个方法是:

用于0中的u..to_插入{
向量插入(0,0);
}
据我所知,这会在每次迭代中复制整个向量

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

fn main(){
让mut-vec=vec![1,2,3];
设to_insert=2;
调整向量大小(向量长度()+插入,0);
&mut vec[to_insert..vec.len()]。将_从_切片复制(&vec[0..vec.len()-to_insert]);
断言(vec,vec![0,0,1,2,3]);
}

向左旋转
/
向右旋转
可能是一种解决方案():

让mut v=vec![1, 2, 3];
v、 扩展(std::iter::repeat(0).take(to_insert));//现在是[1,2,3,0,0,…]
//向量扩展(&[0;to_insert]);//也可用作不太灵活的版本(需要常量插入)
v、 向右旋转(插入);//然后变成[0,0,…,0,1,2,3]

如果您确实需要这样做,那么向量可能不是正确的解决方案。不是批评家,而是试图让你的问题更广泛。为什么需要在零之前加上前缀。这是任意精度整数实现的一部分,其中每个
u64
表示基数
2^64
中的一个数字(按LSB顺序)。当应用128位的左移位时,最简单的解决方案是预加2个零,我想在
O(N)
时间内这样做。我不知道你所说的“为什么以后会这样”是什么意思。我的意思是,你为什么不在推其他数字之前先推零呢。我在想,为了高效插入,可以使用链表:@Netwave哦,另一个数字已经在一个向量中,我正在尝试在不分配新向量的情况下执行位移位。我考虑过使用链表,但即使根据文档
基于数组的容器通常速度更快,内存效率更高,并且更好地利用CPU缓存
,因此所有其他操作都会不必要地减慢。这里应用的复制:
v.splice(…0,std::iter::repeat(0).take(to_insert))
我已经做了一些测试,您实际上需要
向右旋转(插入)
但我认为这是正确的方法。事实上,这是一个错误,改为
向右旋转