2014-09-13 6 views
1

C++의 std::copy 함수는 다른 반복자가 가리키는 요소를 통해 하나의 반복자가 가리키는 요소를 복사합니다. C++에서 std::copy의 중요한 측면 중 하나는 좋은 구현은 C++에서 말하는 반복 요소의 유형이 TriviallyCopyable 인 경우 std::memmove을 사용하여 최적화한다는 것입니다 (Rust가 말하는 Copy 특성을 구현하는 유형).Rust에 C++ std :: copy와 동등한 기능이 있습니까?

현재 녹 표준 라이브러리에는 C++ std::copy과 동등하거나 비슷한 것이 있습니까?

답변

1

Custer의 Rust와 iterators의 반복자는 다른 것들입니다. 녹 방지 반복자는 자바와 다른 고급 언어의 것들과 비슷하다. 포인터와 같은 것이 아니며 일종의 "생산자"이다. 따라서 데이터를 대량으로 복사하도록 최적화하는 것은 불가능합니다. 예를 들어 무한한 값 시퀀스를 반환 할 수 있기 때문에 일부 반복자에 대해서는 전혀 이해가되지 않을 수 있습니다.

당신이, 내가 추측 할 수있는 가장 가까운 것은이 같은 것입니다 (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()); 
}