1

C++のstd::copy関数は、ある反復子が指す要素を別の反復子が指す要素の上にコピーします。in C++の重要な側面の 1 つは、反復される要素の型がC++ 言語 ( Rust 言語でトレイトを実装する型)である場合にstd::copy使用することによって、適切な実装が最適化されることです。std::memmoveTriviallyCopyableCopy

std::copy現在、Rust 標準ライブラリに C++ と同等または類似するものはありますか?

4

1 に答える 1

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());
}
于 2014-09-13T11:02:05.353 に答える