【发布时间】:2021-07-29 20:51:19
【问题描述】:
我正在尝试创建一个函数,该函数采用 &[Vec<u64>] 并使用迭代器返回每行中最大 i64 的元组“坐标”向量。我让它在具体类型上工作,但我希望它在T 上是通用的,并且限制在可迭代类型上。到目前为止我的代码:
fn find_largest_per_row<T>(input: &[T]) -> Vec<(usize, usize)>
where
T: IntoIterator<Item = u64>,
{
input
.iter()
.enumerate()
.map(|(r, v)| {
v.into_iter()
.enumerate()
.max_by_key(|&(_, v)| v)
.map(|(c, _)| (r, c))
.unwrap()
})
.collect::<Vec<_>>()
}
我明白了:
cannot move out of `*v` which is behind a shared reference
我该如何解决这个问题?我意识到T 是一个参考,所以我尝试了.cloned(),但没有成功。
另外,对于IntoIterator<Item=u64>,我需要指定u64 还是可以提供更通用的内容?
【问题讨论】:
-
您可以拥有
T: IntoIterator<Item=u64>,因为T在&[T]中,所以它总是在IntoIterator无法将self移动到接收器的共享引用后面迭代器。
标签: generics rust traits move-semantics