2016-07-06 30 views
8

क्या जंग में वेक्टर के बाएं-शिफ्ट तत्वों का एक सुरक्षित तरीका है? (vec![1, 2, 3]vec![3] बन जाता है जब दो स्थानों को छोड़ दिया जाता है)। मैं Copy प्रकारों से निपट रहा हूं, और मैं memmove के साथ जो कुछ भी करूंगा उससे अधिक जुर्माना नहीं देना चाहता हूं।जंग में तत्वों को छोड़कर वेक्टर के तत्व कैसे छोड़े जाते हैं?

मुझे मिला एकमात्र समाधान असुरक्षित है: memmove का उपयोग सीधे ptr::copy के माध्यम से करें।

उत्तर

11

मैं Vec::drain का उपयोग करूंगा।

आप इसे उन तत्वों की एक श्रृंखला के साथ कॉल कर सकते हैं जिन्हें आप निकालना चाहते हैं, और यह बाद में उन्हें स्थानांतरित कर देगा। उदाहरण: (playpen)

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

    v.drain(0..2); 

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

एक अन्य ध्यान दें:

मैं Copy प्रकार के साथ काम कर रहा हूँ, और मैं एक memmove साथ की तुलना में एक दंड उच्च भुगतान करने के लिए क्या मैं करूंगा नहीं करना चाहती।

टिप्पण लायक है कि चलती हमेशा जंग में एक memcpy, तो Copy बनाम गैर Copy भेद करता है यहाँ बात नहीं है। यह वही होगा यदि प्रकार Copy नहीं थे।

+0

5 के निशान पर बधाई :) –

संबंधित मुद्दे