2
我想在矢量反覆幾次:克隆迭代器是否複製整個底層向量?
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);
}
}
我看着What's the most efficient way to reuse an iterator in Rust?:
迭代器一般是克隆,能夠在所有他們的「作品」是克隆能。
實際的堆分配數據是迭代器的「片」還是它指向堆數據的內存地址上述片?
我想兩次使用i_vec.iter()不會遭受借用檢查器的憤怒,因爲我們沒有綁定i_vec的東西。 – Dragon
@Dragon它的作品,因爲它每次只需要一個只讀的參考,它可以有多個。你原來的代碼的問題是'for my in_vector'消耗了vector(它用來將數據移出vector),所以你不能在這之後使用vector。 – interjay
甚至更習慣(正如Clippy告訴你的)是'爲了我在&i_vec {for j in&i_vec {...}}'。 – Shepmaster