Есть ли эквивалент 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());
}
Другие вопросы по тегам