एक वेक्टर डुप्लिकेट बनाना
वेक्टर को स्वयं जोड़ते समय, प्रदर्शन कारणों से लूप का उपयोग करने से बचना वांछनीय है। std::vector::insert फ़ंक्शन, जबकि एक विकल्प है, *इसके लिए एक पुनरावर्तक का उपयोग करने की अनुमति नहीं देता है।
std::copy के साथ समस्या का समाधान
इस समस्या को हल करने के लिए std::copy का उपयोग करना एक समाधान की तरह लग सकता है, लेकिन यह दृष्टिकोण विभाजन को जन्म दे सकता है दोष।
इष्टतम समाधान
इष्टतम समाधान में आकार बदलें (या आरक्षित) और Copy_n दोनों का उपयोग करना शामिल है। यहां बताया गया है कि यह कैसे काम करता है:
auto old_count = xx.size(); xx.resize(2 * old_count); std::copy_n(xx.begin(), old_count, xx.begin() old_count);
यह कोड सबसे पहले मूल वेक्टर आकार को Old_count में संग्रहीत करता है। फिर यह अपनी क्षमता को दोगुना करने के लिए xx का आकार बदलता है। अंत में, std::copy_n, xx की शुरुआत से xx के अंत तक तत्वों को कॉपी करता है, प्रभावी ढंग से वेक्टर की नकल करता है। xx.आकार(); xx.रिजर्व(2 * पुराना_गिनती); std::copy_n(xx.begin(), Old_count, std::back_inserter(xx));
रिजर्व का उपयोग करते समय, Copy_n आवश्यक है क्योंकि अंत() पुनरावर्तक अंत से आगे बिंदु बनाता है, जिससे यह अमान्य हो जाता है सम्मिलन।
auto old_count = xx.size(); xx.reserve(2 * old_count); std::copy_n(xx.begin(), old_count, std::back_inserter(xx));
अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।
Copyright© 2022 湘ICP备2022001581号-3