यहाँ कई उत्तर दिए गए हैं और उन सभी के बारे में काम पूरा हो जाएगा।
हालाँकि कुछ भ्रामक सलाह है!
यहाँ विकल्प हैं:
vector<int> dataVec;
int dataArray[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
unsigned dataArraySize = sizeof(dataArray) / sizeof(int);
// Method 1: Copy the array to the vector using back_inserter.
{
copy(&dataArray[0], &dataArray[dataArraySize], back_inserter(dataVec));
}
// Method 2: Same as 1 but pre-extend the vector by the size of the array using reserve
{
dataVec.reserve(dataVec.size() + dataArraySize);
copy(&dataArray[0], &dataArray[dataArraySize], back_inserter(dataVec));
}
// Method 3: Memcpy
{
dataVec.resize(dataVec.size() + dataArraySize);
memcpy(&dataVec[dataVec.size() - dataArraySize], &dataArray[0], dataArraySize * sizeof(int));
}
// Method 4: vector::insert
{
dataVec.insert(dataVec.end(), &dataArray[0], &dataArray[dataArraySize]);
}
// Method 5: vector + vector
{
vector<int> dataVec2(&dataArray[0], &dataArray[dataArraySize]);
dataVec.insert(dataVec.end(), dataVec2.begin(), dataVec2.end());
}
वेक्टर :: इंसर्ट का उपयोग करते हुए एक लंबी कहानी लघु विधि 4 में कटौती करना, bsruth के परिदृश्य के लिए सबसे अच्छा है।
यहाँ कुछ गोर विवरण हैं:
विधि 1 शायद समझना सबसे आसान है। बस सरणी से प्रत्येक तत्व को कॉपी करें और इसे वेक्टर की पीठ में धकेल दें। काश, यह धीमा है। क्योंकि एक लूप है (कॉपी फ़ंक्शन के साथ निहित), प्रत्येक तत्व को व्यक्तिगत रूप से व्यवहार किया जाना चाहिए; इस तथ्य के आधार पर कोई प्रदर्शन सुधार नहीं किया जा सकता है कि हम जानते हैं कि सरणी और वैक्टर सन्निहित ब्लॉक हैं।
विधि 2 विधि 1 के लिए एक सुझाया गया प्रदर्शन सुधार है; इसे जोड़ने से पहले केवल सरणी का आकार पूर्व-आरक्षित करें। बड़े सरणियों के लिए यह मदद कर सकता है। हालांकि यहां सबसे अच्छी सलाह यह है कि आप रिजर्व का उपयोग तब तक न करें जब तक कि प्रोफाइलिंग आपको सुझाव न दे कि आप एक सुधार प्राप्त कर सकते हैं (या आपको यह सुनिश्चित करने की आवश्यकता है कि आपके पुनरावृत्तियों को अमान्य नहीं किया जाएगा)। बज्ने सहमत हैं । संयोग से, मैंने पाया है कि इस विधि का प्रदर्शन किया धीमी समय के सबसे हालांकि मैं व्यापक व्याख्या करने के लिए कारण है कि यह नियमित रूप से था संघर्ष कर रहा हूँ काफी धीमी विधि 1 से ...
विधि 3 पुराने स्कूल समाधान है - समस्या पर कुछ सी फेंक दें! POD प्रकारों के लिए ठीक और तेज़ काम करता है। इस मामले में वेक्टर की सीमा के बाहर मेमसीपी कार्यों के बाद आकार बदलने की आवश्यकता है और वेक्टर को यह बताने का कोई तरीका नहीं है कि इसका आकार बदल गया है। इसके अलावा एक बदसूरत समाधान (बाइट कॉपी करना!) याद रखें कि यह केवल POD प्रकारों के लिए उपयोग किया जा सकता है । मैं इस समाधान का उपयोग कभी नहीं करूंगा।
विधि 4 जाने का सबसे अच्छा तरीका है। यह अर्थ स्पष्ट है, यह (आमतौर पर) सबसे तेज़ है और यह किसी भी वस्तु के लिए काम करता है। इस एप्लिकेशन के लिए इस पद्धति का उपयोग करने के लिए कोई नकारात्मक पहलू नहीं है।
विधि 5 विधि 4 पर एक ट्वीक है - सरणी को वेक्टर में कॉपी करें और फिर इसे जोड़ें। अच्छा विकल्प - आम तौर पर फास्ट-ईश और स्पष्ट।
अंत में, आप जानते हैं कि आप ऐरे के स्थान पर वैक्टर का उपयोग कर सकते हैं, है ना? जब कोई फ़ंक्शन सी-स्टाइल सरणियों की अपेक्षा करता है, तो आप वैक्टर का उपयोग कर सकते हैं:
vector<char> v(50); // Ensure there's enough space
strcpy(&v[0], "prefer vectors to c arrays");
आशा है कि वहाँ किसी को मदद करता है!