我想初始化一个具有在运行时确定的特定大小的零向量。
在 C 语言中,它会是这样的:
int main(void)
{
uint size = get_uchar();
int A[size][size];
memset(A, 0, size*size*sizeof(int));
}
这是我尝试用 Rust 编写的辅助函数,但我认为切片语法0..size
冒犯了编译器。此外,它看起来比 C 版本更冗长。有没有更惯用的方法来做到这一点?
fn zeros(size: u32) -> Vec<i32> {
let mut zero_vec: Vec<i32> = Vec::with_capacity(size);
for i in 0..size {
zero_vec.push(0);
}
return zero_vec;
}
我发誓旧文档曾经解释过from_elem()
method here https://doc.rust-lang.org/std/vec/struct.Vec.html并且没有任何排列[0 ; size]
notation https://github.com/rust-lang/rust/issues/15587似乎有效
我想最终将其放入子字符串搜索算法中:
pub fn kmp(text: &str, pattern: &str) -> i64 {
let mut shifts = zeros(pattern.len()+1);
}
要初始化给定长度的零向量(或任何其他常量值),您可以使用vec!
macro:
let len = 10;
let zero_vec = vec![0; len];
也就是说,只需进行几个语法修复后,您的函数就对我有用:
fn zeros(size: u32) -> Vec<i32> {
let mut zero_vec: Vec<i32> = Vec::with_capacity(size as usize);
for i in 0..size {
zero_vec.push(0);
}
return zero_vec;
}
uint
Rust 1.0 中不再存在,size
需要被投射为usize
,以及需要匹配的向量的类型(已更改let mut zero_vec: Vec<i64>
to let mut zero_vec: Vec<i32>
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)