C++ में std::vector को जोड़ना: उदाहरणों के साथ 3 सर्वश्रेष्ठ तरीके

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

परिचय: वेक्टर क्यों जोड़ें और यह मुश्किल क्यों है?

\n\n

नमस्ते, साथी! यदि आपने कभी C++ में डेटा सूचियों को संसाधित करने वाला कोड लिखा है, तो आपने निश्चित रूप से इस कार्य का सामना किया होगा: "मेरे पास दो std::vector हैं, उनसे एक कैसे बनाऊं?" यह प्रश्न Stack Overflow पर एक वास्तविक हिट है (हजारों व्यूज!), और यह व्यर्थ नहीं है। पहली नज़र में ऐसा लगता है: इसमें मुश्किल क्या है? Python की तरह vector1 + vector2? लेकिन ऐसा नहीं है। C++ में, वेक्टर के लिए ऑपरेटर + परिभाषित नहीं है। हमें उपाय निकालना होता है।

\n\n

आज हम दो std::vectors को जोड़ने के बारे में विस्तार से जानेंगे। मैं आपको 3 सिद्ध तरीके दिखाऊंगा, समझाऊंगा कि कब किसका उपयोग करना है, और उन गलतियों से आगाह करूंगा जिनमें अनुभवी डेवलपर्स भी फंस जाते हैं। चलिए शुरू करते हैं!

\n\n

तरीका नंबर 1: insert() — क्लासिक तरीका

\n\n

सबसे स्पष्ट और अक्सर इस्तेमाल की जाने वाली विधि insert() विधि है। यह एक वेक्टर के सभी तत्वों को दूसरे वेक्टर के अंत में सम्मिलित करने की अनुमति देती है। सिंटैक्स सरल और सुरुचिपूर्ण है:

\n\n
#include <iostream>\n#include <vector>\n\nint main() {\n    std::vector<int> vec1 = {1, 2, 3};\n    std::vector<int> vec2 = {4, 5, 6};\n\n    // जोड़ना: vec2 को vec1 के अंत में डालें\n    vec1.insert(vec1.end(), vec2.begin(), vec2.end());\n\n    // आउटपुट: 1 2 3 4 5 6\n    for (int v : vec1) std::cout << v << " ";\n    return 0;\n}
\n\n

यह कैसे काम करता है: हम कंपाइलर से कहते हैं: "स्थिति vec1.end() से शुरू करते हुए (अर्थात पहले वेक्टर के अंतिम तत्व के बाद), vec2.begin() और vec2.end() के बीच जो कुछ भी है उसे कॉपी करो।" बस — C++ में वेक्टर का संयोजन हो गया।

\n\n

insert() के फायदे और नुकसान

\n
    \n
  • ✅ फायदे: सरलता, पठनीयता, किसी भी प्रकार के साथ काम करता है।
  • \n
  • ❌ नुकसान: यदि vec1 छोटा है और vec2 बहुत बड़ा है, तो सम्मिलन के दौरान कई बार मेमोरी पुनः आवंटन हो सकता है। यह बड़ी मात्रा में वेक्टर कॉन्केटनेशन के प्रदर्शन को कम करता है।
  • \n
\n\n

सुझाव: यदि आप अंतिम आकार जानते हैं, तो पहले से vec1.reserve(vec1.size() + vec2.size()) कॉल करें। यह अनावश्यक आवंटन से बचाएगा।

\n\n

तरीका नंबर 2: std::merge() — क्रमबद्ध डेटा के लिए

\n\n

क्या होगा यदि आपके वेक्टर पहले से क्रमबद्ध हैं? या आपको केवल जोड़ना नहीं, बल्कि एक एकीकृत क्रमबद्ध सरणी प्राप्त करनी है? तब <algorithm> हेडर फ़ाइल से std::merge एल्गोरिदम मंच पर आता है।

\n\n
#include <iostream>\n#include <vector>\n#include <algorithm> // std::merge के लिए\n\nint main() {\n    std::vector<int> vec1 = {1, 3, 5};\n    std::vector<int> vec2 = {2, 4, 6};\n    std::vector<int> result;\n\n    // अनावश्यक कॉपी से बचने के लिए जगह आरक्षित करें\n    result.reserve(vec1.size() + vec2.size());\n\n    // दो क्रमबद्ध श्रेणियों को मर्ज करें\n    std::merge(vec1.begin(), vec1.end(),\n               vec2.begin(), vec2.end(),\n               std::back_inserter(result));\n\n    // आउटपुट: 1 2 3 4 5 6\n    for (int v : result) std::cout << v << " ";\n    return 0;\n}
\n\n

ध्यान दें: std::merge के लिए आवश्यक है कि दोनों इनपुट श्रेणियां आरोही क्रम में क्रमबद्ध हों। यदि ऐसा नहीं है, तो परिणाम अप्रत्याशित होगा। लेकिन यदि डेटा क्रमबद्ध है, तो यह विधि प्रदर्शन की राजा है: जटिलता O(n + m)।

\n\n

std::merge का उपयोग कब करें?

\n
    \n
  • यदि आप दो SQL क्वेरी या समय के अनुसार क्रमबद्ध लॉग के परिणामों को मिला रहे हैं।
  • \n
  • जब आपको केवल दो std::vectors को जोड़ना नहीं, बल्कि विशेष रूप से क्रमबद्ध विलय की आवश्यकता हो।
  • \n
  • यदि मूल वेक्टर को बदला नहीं जा सकता (हम तीसरा वेक्टर result बनाते हैं)।
  • \n
\n\n

तरीका नंबर 3: Move semantics — C++11 और नए के लिए गति

\n\n

मान लीजिए, आपको मूल वेक्टर की आवश्यकता नहीं है

ब्लॉग

पुस्तक अनुशंसाएँ