我想一个快速创建VecDeque使用::from()。我有以下Rust代码:
use std::collections::VecDeque;
fn main() {
let ring = VecDeque::from([1, 2, 3]);
println!("{:?}", ring);
}
Run Code Online (Sandbox Code Playgroud)
我收到以下编译器错误:
use std::collections::VecDeque;
fn main() {
let ring = VecDeque::from([1, 2, 3]);
println!("{:?}", ring);
}
Run Code Online (Sandbox Code Playgroud)
看起来该VecDeque集合未实现该from特征,但是文档建议实现该特征 。我究竟做错了什么?
或者,您也可以使用From<Vec<T>>:
Run Code Online (Sandbox Code Playgroud)fn from(other: Vec<T>) -> VecDeque<T>把一个
Vec<T>变成一个VecDeque<T>。这避免了在可能的情况下重新分配,但其条件是严格的,并且可能会发生变化,因此不应依赖,除非
Vec<T>来自From<VecDeque<T>>并且尚未重新分配。
例子:
let vector: Vec<i32> = vec![0, 1, 2];
let vec_queue: VecDeque<i32> = VecDeque::from(vector);
Run Code Online (Sandbox Code Playgroud)
use std::collections::VecDeque;
use std::iter::FromIterator;
fn main() {
let ring = VecDeque::from_iter(&[1, 2, 3]);
println!("{:?}", ring);
}
Run Code Online (Sandbox Code Playgroud)
它仅实现From<Vec<T>>而[...]不是Vec。自从它实现以来FromIterator,您可以将任何类型的迭代器用作源from_iter。&[1, 2, 3]是因为from_iter需要一个Iterator。
| 归档时间: |
|
| 查看次数: |
1001 次 |
| 最近记录: |