I'd like to initialize a vector of zeros with a specific size that is determined at runtime.
In C, it would be like:
int main(void)
{
uint size = get_uchar();
int A[size][size];
memset(A, 0, size*size*sizeof(int));
}
Here's the helper function that I tried writing in Rust, but I think the slicing syntax 0..size
is offending the compiler. Besides, it looks more verbose than the C version. Is there a more idiomatic way to do this?
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;
}
I swear that the old docs used to explain a from_elem()
method here and none of the permutations of the [0 ; size]
notation seem to work
I'd like to stick this into a substring search algorithm ultimately:
pub fn kmp(text: &str, pattern: &str) -> i64 {
let mut shifts = zeros(pattern.len()+1);
}
You can also use the
iter::repeat
function, which I suppose is "more idiomatic" (and just looks nicer to me):Here is another way, much shorter. It works with Rust 1.0:
You may use resize
To initialize a vector of zeros (or any other constant value) of a given length, you can use the
vec!
macro:That said, your function worked for me after just a couple syntax fixes:
uint
no longer exists in Rust 1.0,size
needed to be cast asusize
, and the types for the vectors needed to match (changedlet mut zero_vec: Vec<i64>
tolet mut zero_vec: Vec<i32>
.