11 rust
我试图简单地将切片转换为矢量.以下代码:
let a = &[0u8];
let b: Vec<u8> = a.iter().collect();
Run Code Online (Sandbox Code Playgroud)
失败,出现以下错误消息:
3 | let b: Vec<u8> = a.iter().collect();
| ^^^^^^^ a collection of type `std::vec::Vec<u8>` cannot be built from an iterator over elements of type `&u8`
Run Code Online (Sandbox Code Playgroud)
我错过了什么?
tre*_*tcl 20
收集到一个Vec非常常见的切片有一个方法to_vec,正是这样做:
let b = a.to_vec();
Run Code Online (Sandbox Code Playgroud)
你得到了与CodesInChaos的答案相同的东西,但更简洁.
请注意,to_vec需要T: Clone.为了摆脱Vec<T>困境,&[T]你必须能够拥有T一个非拥有者&T,这是什么Clone.
切片也可以实现ToOwned,因此您可以使用to_owned而不是to_vec如果您希望对不同类型的非拥有容器具有通用性.如果您的代码仅适用于切片,请选择to_vec.
Cod*_*aos 10
迭代器只返回对元素的引用(这里&u8)。要获得拥有的值(此处u8),您可以使用.cloned().
let a: &[u8] = &[0u8];
let b: Vec<u8> = a.iter().cloned().collect();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3801 次 |
| 最近记录: |