2016-07-06 21 views
8

Có cách nào an toàn cho các phần tử dịch chuyển trái của một véc-tơ trong Rust không? (vec![1, 2, 3] trở thành vec![3] khi hai địa điểm được dịch chuyển sang trái). Tôi đang xử lý các loại Copy và tôi không muốn trả tiền phạt cao hơn số tiền tôi muốn với memmove.Các phần tử của một vector bị dịch chuyển trái trong Rust như thế nào?

Giải pháp duy nhất tôi tìm thấy là không an toàn: sử dụng memmove trực tiếp qua ptr::copy.

Trả lời

11

Tôi sẽ sử dụng Vec::drain.

Bạn có thể gọi nó bằng một loạt các yếu tố bạn muốn xóa và sau đó nó sẽ chuyển đổi chúng. Ví dụ: (playpen)

fn main() { 
    let mut v = vec![1, 2, 3]; 

    v.drain(0..2); 

    assert_eq!(vec![3], v); 
} 

Một lưu ý khác:

Tôi đang đối phó với Copy loại, và tôi không muốn trả tiền phạt cao hơn so với những gì tôi làm với một memmove.

Worth lưu ý di chuyển đó là luôn một memcpy ở Rust, do đó Copy vs phi Copy khác biệt không quan trọng ở đây. Sẽ giống nhau nếu các loại không phải là Copy.

+0

Chúc mừng dấu 5K :) –

Các vấn đề liên quan