Есть ли эквивалент C++ std::copy в Rust?
std::copy
Функция в C++ копирует элементы, на которые указывает один итератор, на элементы, на которые указывает другой итератор. Один важный аспект std::copy
в C++ это то, что хорошие реализации оптимизируют с помощью std::memmove
если тип повторяющихся элементов TriviallyCopyable
в C++ говорят (тип, который реализует Copy
черта в русте говорят).
Есть ли в настоящее время что-нибудь эквивалентное или похожее на C++ std::copy
в стандартной библиотеке Rust?
1 ответ
Итераторы в Rust и итераторы в C++ - это разные вещи. Итераторы Rust похожи на итераторы в Java и других языках высокого уровня - они не похожи на указатели, они являются своего рода "производителями" данных. Так что просто невозможно оптимизировать их для массового копирования данных - это может вообще не иметь никакого смысла для некоторого итератора, потому что он может, например, возвращать бесконечную последовательность значений.
Думаю, самое близкое, что вы можете сделать, это что-то вроде этого (для Copy
типы; за Clone
типы *t = *s
станет *t = s.clone()
):
fn main() {
let source = [1i, 2, 3, 4, 5];
let mut target = [1i, 1, 1, 1, 1];
println!("source: {}", source.as_slice());
println!("target: {}", target.as_slice());
println!("-------");
for (s, t) in source.iter().zip(target.mut_iter()) {
*t = *s;
}
println!("source: {}", source.as_slice());
println!("target: {}", target.as_slice());
}