2016-07-06 20 views
8

Bir vektörün elemanlarını Rust'ta değiştirmek için güvenli bir yol var mı? (vec![1, 2, 3], iki yeri sola kaydırıldığında vec![3] olur). Ben Copy türleri ile uğraşıyorum ve ben bir memmove ile yaptığımdan daha yüksek bir ceza ödemek istemiyorum.Bir vektörün elemanları Rust'ta nasıl değişti?

Bulduğum tek çözüm güvensiz: memmove'u doğrudan ptr::copy aracılığıyla kullanın.

cevap

11

Ben Vec::drain kullanmak.

Kaldırmak istediğiniz öğelerin bir dizi diyebilirsin ve sonradan onları kaydırmak gerekir. Örnek: (playpen)

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

    v.drain(0..2); 

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

Bir başka not:

Ben Copy türleri uğraşıyorum ve bir memmove ile ne olduğundan daha penaltı yüksek ödemek istemiyoruz.

Worth o hareketli belirterek hep Rust'ta memcpy, bu yüzden önemli değil burada Copy olmayan ayrım yapar vs Copy olduğunu. Türler Copy değilse, aynı olurdu. 5K işaretini

+0

Tebrikler :) –