在Rust中是否有等效的C ++ std :: copy?

时间:2014-09-13 08:29:47

标签: algorithm rust memmove

C ++中的std::copy函数将一个迭代器指向的元素复制到另一个迭代器指向的元素上。 C ++中std::copy的一个重要方面是,如果C ++中迭代元素的类型为std::memmove,则使用TriviallyCopyable优化实现优化(实现Copy的类型Rust的特质说话。)

目前在Rust标准库中是否存在与C ++ std::copy等效或类似的内容?

1 个答案:

答案 0 :(得分: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());
}