我想要多次迭代一个向量:
let my_vector = vec![1, 2, 3, 4, 5];
let mut out_vector = vec![];
for i in my_vector {
for j in my_vector {
out_vector.push(i * j + i + j);
}
}
j循环存在“移动后使用值”错误。我知道我可以在两个 my_vector
之前放置&
并借用向量,但拥有多种解决方法是很好的。我也想要一些见解。
或者,我可以编写以下内容:
let i_vec = vec![1, 2, 3, 4, 5, 6];
let iterator = i_vec.iter();
let mut out_vec = vec![];
for i in iterator.clone() {
for j in iterator.clone() {
out_vec.push(i * j + i + j);
}
}
我看了一下关于如何在Rust中高效重用迭代器的问题:
What's the most efficient way to reuse an iterator in Rust?
:实际堆分配的数据是迭代器的“部分”还是指向堆数据的内存地址是上述“部分”?通常情况下,如果所有“部分”都支持Clone,则迭代器是可克隆的。
for i in my_vector
消耗了向量(它用于将数据移出向量),所以在此之后你不能再使用该向量。 - interjayfor i in &i_vec { for j in &i_vec { ... }}
。 - Shepmaster