我想从Vec<u8>
构建HashSet<u8>
。我想做到这一点从Rust中的矢量生成HashSet
- 在一行代码,
- 复制数据只有一次,
- 只使用
2n
内存,
,但我可以得到的唯一的事情编译就是这一块..垃圾,我认为它复制两次数据并使用3n
内存。
fn vec_to_set(vec: Vec<u8>) -> HashSet<u8> {
let mut victim = vec.clone();
let x: HashSet<u8> = victim.drain(..).collect();
return x;
}
我希望能写简单的东西,像这样:
fn vec_to_set(vec: Vec<u8>) -> HashSet<u8> {
return HashSet::from_iter(vec.iter());
}
但不会编译:
error[E0308]: mismatched types
--> <anon>:5:12
|
5 | return HashSet::from_iter(vec.iter());
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ expected u8, found &u8
|
= note: expected type `std::collections::HashSet<u8>`
= note: found type `std::collections::HashSet<&u8, _>`
..我真的不理解的错误消息,可能是因为我需要RTFM。
代码和错误消息不匹配。你的意思是'iter()' – bluss
仅供参考:在你的第一个代码中,你不需要克隆载体,你只需要声明它是可变的。可以通过'let mut victim = vec;'或者在参数列表中使用''vec_to_set(mut vec:Vec)''。 –
您没有正确使用* O *表示法。 _O(n)= O(2n)= O(3n)= O(c * n)_。关键是常数不重要。我认为这很清楚你的意思,但你应该说只是“_2n_记忆”或其他。 – Lii