2012-10-12 16 views
14

संभव डुप्लिकेट:
How to convert vector to array C++एक वेक्टर की सामग्री को एक सरणी में कॉपी करने का सबसे तेज़ तरीका?

जब सरणियों के साथ काम कर आप

memcpy(void *destination, const void *source, size_t num); 

उपयोग करने के लिए हालांकि वैक्टर बस एक प्रति विधि के लिए iterators प्रदान की क्षमता है, memcpy बेकार प्रतिपादन है । सामग्री को किसी अन्य स्थान पर प्रतिलिपि बनाने के लिए सबसे तेज़ तरीका क्या है?

+11

सी ++ में, ** हमेशा ** 'memcpy' की बजाय 'std :: copy' का उपयोग करें (पूर्व बाद के बाद प्रतिनिधि को पीओ ssible)। – ildjarn

+1

मुझे नहीं पता कि यह कितनी तेज़ है, लेकिन आप 'std :: copy' का उपयोग कर सकते हैं। –

+1

मुझे लगता है कि यहां सबसे स्पष्ट उत्तर होगा: _ क्यों करें (आपको लगता है) आपको वेक्टर से एक सरणी में कॉपी करने की आवश्यकता है? _ एक वेक्टर _is_ एक सरणी है, और इसका उपयोग इस तरह किया जा सकता है। एक दुष्प्रभाव के रूप में, _no all_ पर प्रतिलिपि निश्चित रूप से सबसे तेज़ संभव प्रतिलिपि संचालन है। – sbi

उत्तर

31

std::copy, हाथ नीचे। आंतरिक रूप से सर्वोत्तम उपलब्ध विधि का उपयोग करने के लिए इसे अत्यधिक अनुकूलित किया गया है। यह इस प्रकार पूरी तरह से memcpy के बराबर है। memcpy का उपयोग करने के लिए कोई कारण नहीं है, भले ही सी-स्टाइल सरणी या मेमोरी बफर के बीच प्रतिलिपि बनाएँ।

3

आप एक वेक्टर के साथ memcpy उपयोग कर सकते हैं - वैक्टर स्मृति में सन्निहित ताकि वेक्टर, खाली नहीं है आप memcpy

को &vData[0] उपयोग कर सकते हैं (जहां vData अपने वेक्टर है) अपने स्रोत सूचक के रूप में प्रदान की होने की गारंटी कर रहे हैं EDIT जैसा कि अन्य उत्तरों के लिए टिप्पणियों के अनुसार उल्लेख किया गया है, यह केवल तभी काम करता है जब वेक्टर का मान_ प्रकार छोटा रूप से कॉपी करने योग्य हो।

+2

-1 उसी कारण से ildjarn द्वारा नोसी के जवाब के तहत उल्लेख किया गया है। –

+1

@ लिडजर्न ठीक मेला पर्याप्त - मुझे यह नहीं पता था और मुझे यकीन है कि ऐसे लोग भी होंगे जो ऐसा नहीं करते हैं इसलिए मैं वास्तव में इस उत्तर को नहीं हटाऊंगा। – mathematician1975

11

आपको अपने कार्यक्रम के साथ अपने पर्यावरण में, अपने लिए यह मापना होगा। किसी भी अन्य उत्तर में बहुत सी चेतावनी होगी।

जबकि आपको लगता है कि, यहाँ एक विधि आप के खिलाफ तुलना कर सकते हैं करते हैं:

std::copy(source.begin(), source.end(), destination); 
5

इस प्रयास करें: - एक सरणी में नकल के लिए

std::vector<int> newvector(oldvector); 

इस कोशिश: -

std::copy(source.begin(), source.end(), destination); 
+2

-1। पूछताछ एक सरणी चाहता है, न कि एक नया वेक्टर। –

+0

क्षमा करें, मैंने इसे गलत पढ़ा है तो रॉब द्वारा उत्तर दिया गया यह बहुत अच्छा होगा: - std :: copy (source.begin(), source.end(), गंतव्य); –

+0

मैंने अभी ठीक किया है। कहने के लिए Thanx !!! :) –