2016-07-06 62 views
8

Esiste un modo sicuro per spostare a sinistra elementi di un vettore in Rust? (vec![1, 2, 3] diventa vec![3] se spostato a sinistra di due posizioni). Ho a che fare con i tipi Copy e non voglio pagare una penale più alta di quella che farei con uno memmove.In che modo gli elementi di un vettore sono spostati a sinistra in Rust?

L'unica soluzione che ho trovato non è sicura: utilizzare memmove direttamente tramite ptr::copy.

risposta

11

Vorrei utilizzare Vec::drain.

È possibile chiamarlo con un intervallo degli elementi che si desidera rimuovere e in seguito li sposterà. Esempio: (playpen)

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

    v.drain(0..2); 

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

Un'altra nota:

ho a che fare con Copy tipi, e non voglio pagare una penale superiore a quello che farebbe con un memmove.

Da segnalare che in movimento è sempre un memcpy a Rust, in modo che il Copy vs non Copy distinzione non importa qui. Sarebbe lo stesso se i tipi non fossero Copy.

+0

Congratulazioni per il marchio 5K :) –