我有一个向量:
let v = Vec<T>::with_capacity(10);
我想用相反的顺序填充数据:
let i = 10;
while i > 0 {
i -= 1;
v[i] = non_pure_function(i);
}
不幸的是,这种恐慌;当使用Vec::with_capacity
进行分配时,向量的实际初始长度仍为0
。
我怎样才能最好地做到这一点?如果我没有T
的构造函数怎么办?
答案 0 :(得分:1)
如何反向填充向量?
您可以使用VecDeque来做到这一点:
use std::collections::VecDeque;
fn main() {
let mut v = VecDeque::new();
for i in 0..5 {
v.push_front(i);
}
for item in v {
print!("{}", item);
}
}
代替使用VecDeque
,可以使用数组和迭代器解决此问题:
None
值fn main() {
let mut v = [None; 10];
let mut i = 5i32;
while i > 0 {
i -= 1;
v[i as usize] = Some(4i32 - i);
}
let reverse_populated: Vec<i32> = v
.iter()
.filter(|x| x.is_some())
.map(|x| x.unwrap())
.collect();
for item in reverse_populated {
print!("{:?}", item);
}
}
两个输出均为:
43210