std::सूची में C++ उदाहरण के साथ
std::list क्या है?
In C++, std::list एक स्टोरेज कंटेनर को संदर्भित करता है। std:list आपको कहीं से भी आइटम डालने और हटाने की अनुमति देता है। std::list को डबल-लिंक्ड सूची के रूप में कार्यान्वित किया जाता है। इसका मतलब है कि सूची डेटा को द्वि-दिशात्मक और क्रमिक रूप से एक्सेस किया जा सकता है।
मानक टेम्पलेट लाइब्रेरी सूची तीव्र यादृच्छिक अभिगम का समर्थन नहीं करती है, लेकिन यह सभी दिशाओं से अनुक्रमिक अभिगम का समर्थन करती है।
आप सूची तत्वों को अलग-अलग मेमोरी खंडों में बिखेर सकते हैं। डेटा तक क्रमिक पहुँच के लिए आवश्यक जानकारी एक कंटेनर में संग्रहीत की जाती है। रनटाइम के दौरान आवश्यकतानुसार std::list दोनों छोर से फैल और सिकुड़ सकती है। एक आंतरिक आबंटनकर्ता स्वचालित रूप से भंडारण आवश्यकताओं को पूरा करता है।
std::list का उपयोग क्यों करें?
std::List का उपयोग करने के कारण यहां दिए गए हैं:
- std::list अन्य अनुक्रम कंटेनरों जैसे array और vector की तुलना में बेहतर कार्य करता है।
- किसी भी स्थिति से तत्वों को सम्मिलित करने, स्थानांतरित करने और निकालने में उनका प्रदर्शन बेहतर होता है।
- std::list उन एल्गोरिदम के साथ भी बेहतर कार्य करता है जो इस प्रकार के कार्यों को गहनता से निष्पादित करते हैं।
सूची वाक्यविन्यास
std::list को परिभाषित करने के लिए हमें आयात करना होगा हेडर फ़ाइल। यहाँ std::list परिभाषा सिंटैक्स है:
template < class Type, class Alloc =allocator<T> > class list;
उपरोक्त मापदंडों का विवरण इस प्रकार है:
- T – इसमें निहित तत्व के प्रकार को परिभाषित करता है। आप T को किसी भी डेटा प्रकार, यहां तक कि उपयोगकर्ता-परिभाषित प्रकार से भी प्रतिस्थापित कर सकते हैं।
- Alloc – एलोकेटर ऑब्जेक्ट के प्रकार को परिभाषित करता है। यह डिफ़ॉल्ट रूप से एलोकेटर क्लास टेम्पलेट का उपयोग करता है। यह मूल्य-निर्भर है और एक सरल मेमोरी आवंटन मॉडल का उपयोग करता है।
उदाहरण 1
#include <algorithm> #include <iostream> #include <list> int main() { std::list<int> my_list = { 12, 5, 10, 9 }; for (int x : my_list) { std::cout << x << '\n'; } }
आउटपुट:
कोड का स्क्रीनशॉट यहां दिया गया है:
कोड स्पष्टीकरण:
- इसके कार्यों का उपयोग करने के लिए एल्गोरिथ्म हेडर फ़ाइल को शामिल करें।
- इसके कार्यों का उपयोग करने के लिए iostream हेडर फ़ाइल को शामिल करें।
- इसके कार्यों का उपयोग करने के लिए सूची हेडर फ़ाइल को शामिल करें.
- main() फ़ंक्शन को कॉल करें। प्रोग्राम लॉजिक को इस फ़ंक्शन के मुख्य भाग में जोड़ा जाना चाहिए।
- 4 पूर्णांकों के सेट के साथ my_list नामक एक सूची बनाएं।
- लूप वैरिएबल x बनाने के लिए for लूप का उपयोग करें। इस वैरिएबल का उपयोग सूची तत्वों पर पुनरावृत्ति करने के लिए किया जाएगा।
- कंसोल पर सूची के मानों को प्रिंट करें.
- शरीर का अंत पाश के लिए.
- main() फ़ंक्शन के मुख्य भाग का अंत.
C++ कार्यों की सूची बनाएं
यहाँ सामान्य std::list फ़ंक्शन दिए गए हैं:
समारोह | विवरण |
---|---|
डालने () | यह फ़ंक्शन इटरेटर द्वारा इंगित स्थिति से पहले एक नया आइटम सम्मिलित करता है। |
वापस धक्का देना() | यह फ़ंक्शन सूची के अंत में एक नया आइटम जोड़ता है। |
पुश_फ्रंट() | यह सूची के अग्र भाग में एक नया आइटम जोड़ता है। |
पॉप_फ्रंट() | यह सूची का पहला आइटम हटा देता है। |
आकार () | यह फ़ंक्शन सूची तत्वों की संख्या निर्धारित करता है। |
सामने() | सूची के प्रथम आइटम निर्धारित करने के लिए. |
पीछे() | सूची का अंतिम आइटम निर्धारित करने के लिए. |
उलटना () | यह सूची आइटम को उलट देता है। |
मर्ज () | यह दो क्रमबद्ध सूचियों को विलीन करता है। |
कंस्ट्रक्टर्स
यहाँ की सूची है कार्यों द्वारा प्रदान किया गया हेडर फाइल:
- डिफ़ॉल्ट कंस्ट्रक्टर std::list::list()- यह शून्य तत्वों के साथ एक खाली सूची बनाता है।
- फिल कंस्ट्रक्टर std::list::list()- यह n तत्वों के साथ एक सूची बनाता है और प्रत्येक तत्व को शून्य (0) का मान प्रदान करता है।
- रेंज कन्स्ट्रक्टर std::list::list()- पहले से अंतिम तक की रेंज में कई तत्वों वाली एक सूची बनाता है।
- कॉपी कंस्ट्रक्टर std::list::list()- यह मौजूदा सूची में शामिल प्रत्येक तत्व की एक प्रतिलिपि के साथ एक सूची बनाता है।
- मूव कंस्ट्रक्टर std::list::list()- मूव सेमेन्टिक्स का उपयोग करके किसी अन्य सूची के तत्वों के साथ एक सूची बनाता है।
- आरंभकर्ता सूची निर्माता std::list::list() - यह मूव सेमेन्टिक्स का उपयोग करके किसी अन्य सूची के तत्वों के साथ एक सूची बनाता है।
उदाहरण 2
#include <iostream> #include <list> using namespace std; int main(void) { list<int> l; list<int> l1 = { 10, 20, 30 }; list<int> l2(l1.begin(), l1.end()); list<int> l3(move(l1)); cout << "Size of list l: " << l.size() << endl; cout << "List l2 contents: " << endl; for (auto it = l2.begin(); it != l2.end(); ++it) cout << *it << endl; cout << "List l3 contents: " << endl; for (auto it = l3.begin(); it != l3.end(); ++it) cout << *it << endl; return 0; }
आउटपुट:
कोड का स्क्रीनशॉट यहां दिया गया है:
कोड स्पष्टीकरण:
- इसके कार्यों का उपयोग करने के लिए iostream हेडर फ़ाइल को शामिल करें।
- इसके कार्यों का उपयोग करने के लिए सूची हेडर फ़ाइल को शामिल करें.
- कोड में std नामस्थान को शामिल करें ताकि उसे कॉल किए बिना उसकी कक्षाओं का उपयोग किया जा सके।
- main() फ़ंक्शन को कॉल करें। प्रोग्राम लॉजिक को इस फ़ंक्शन के मुख्य भाग में जोड़ा जाना चाहिए।
- l नामक एक रिक्त सूची बनाएं.
- 1 पूर्णांकों के सेट के साथ l3 नामक एक सूची बनाएं।
- l2 नामक सूची के सभी तत्वों को प्रारंभ से अंत तक शामिल करते हुए l1 नामक सूची बनाएं।
- मूव सेमेन्टिक्स का उपयोग करके l3 नामक सूची बनाएँ। सूची l3 में सूची l2 के समान सामग्री होगी।
- कंसोल पर अन्य पाठ के साथ l नामक सूची का आकार प्रिंट करें।
- कंसोल पर कुछ पाठ प्रिंट करें.
- इसका नाम वाला एक इटरेटर बनाएं और इसका उपयोग l2 नामक सूची के तत्वों पर पुनरावृति करने के लिए करें।
- कंसोल पर l2 नामक सूची के तत्वों को प्रिंट करें।
- कंसोल पर कुछ पाठ प्रिंट करें.
- इसका नाम वाला एक इटरेटर बनाएं और इसका उपयोग l3 नामक सूची के तत्वों पर पुनरावृति करने के लिए करें।
- कंसोल पर l3 नामक सूची के तत्वों को प्रिंट करें।
- प्रोग्राम को सफलतापूर्वक पूरा होने पर मान लौटाना होगा।
- main() फ़ंक्शन के मुख्य भाग का अंत.
कंटेनर गुण
कंटेनर गुणों की सूची यहां दी गई है:
संपत्ति | विवरण |
---|---|
अनुक्रम | अनुक्रम कंटेनर अपने तत्वों को एक सख्त रैखिक अनुक्रम में व्यवस्थित करते हैं। तत्वों तक अनुक्रम में उनकी स्थिति के आधार पर पहुँचा जा सकता है। |
दोहरी-लिंक्ड सूची | हर तत्व में पिछले और अगले तत्वों को कैसे ढूँढना है, इसकी जानकारी होती है। इससे सम्मिलन और विलोपन कार्यों के लिए निरंतर समय मिलता है। |
आबंटन-जागरूक | आबंटनकर्ता ऑब्जेक्ट का उपयोग भंडारण आकार को गतिशील रूप से संशोधित करने के लिए किया जाता है। |
सूची में सम्मिलित करना
ऐसे कई फ़ंक्शन हैं जिनका उपयोग हम सूची में मान डालने के लिए कर सकते हैं। आइए इसे प्रदर्शित करें:
उदाहरण 3
#include <algorithm> #include <iostream> #include <list> int main() { std::list<int> my_list = { 12, 5, 10, 9 }; my_list.push_front(11); my_list.push_back(18); auto it = std::find(my_list.begin(), my_list.end(), 10); if (it != my_list.end()) { my_list.insert(it, 21); } for (int x : my_list) { std::cout << x << '\n'; } }
आउटपुट:
कोड का स्क्रीनशॉट यहां दिया गया है:
कोड स्पष्टीकरण:
- इसके कार्यों का उपयोग करने के लिए एल्गोरिथ्म हेडर फ़ाइल को शामिल करें।
- इसके कार्यों का उपयोग करने के लिए iostream हेडर फ़ाइल को शामिल करें।
- इसके कार्यों का उपयोग करने के लिए सूची हेडर फ़ाइल को शामिल करें.
- main() फ़ंक्शन को कॉल करें। प्रोग्राम लॉजिक को इस फ़ंक्शन के मुख्य भाग में जोड़ा जाना चाहिए।
- 4 पूर्णांकों के सेट के साथ my_list नामक एक सूची बनाएं।
- तत्व 11 को my_list नामक सूची के सामने डालें।
- my_list नामक सूची के अंत में तत्व 18 डालें।
- एक इटरेटर बनाएं और इसका उपयोग करके my_list सूची से तत्व 10 ढूंढें।
- यह निर्धारित करने के लिए कि उपरोक्त तत्व मिला या नहीं, if कथन का उपयोग करें।
- यदि तत्व 21 पाया गया हो तो उसे उपरोक्त तत्व से पहले डालें।
- if कथन के मुख्य भाग का अंत.
- लूप वैरिएबल x बनाने के लिए for लूप का उपयोग करें। इस वैरिएबल का उपयोग सूची तत्वों पर पुनरावृत्ति करने के लिए किया जाएगा।
- कंसोल पर सूची के मानों को प्रिंट करें.
- लूप के मुख्य भाग का अंत.
- main() फ़ंक्शन के मुख्य भाग का अंत.
सूची से हटाना
किसी सूची से आइटम हटाना संभव है। इरेज() फ़ंक्शन आपको किसी सूची से कोई आइटम या आइटम की श्रेणी हटाने की अनुमति देता है।
- किसी एक आइटम को हटाने के लिए, आपको बस एक पूर्णांक स्थिति पास करनी होगी। आइटम हटा दिया जाएगा।
- किसी रेंज को हटाने के लिए, आप आरंभिक और अंतिम इटरेटर्स को पास करते हैं। आइए इसे प्रदर्शित करें।
उदाहरण 4
#include <algorithm> #include <iostream> #include <list> using namespace std; int main() { std::list<int> my_list = { 12, 5, 10, 9 }; cout << "List elements before deletion: "; for (int x : my_list) { std::cout << x << '\n'; } list<int>::iterator i = my_list.begin(); my_list.erase(i); cout << "\nList elements after deletion: "; for (int x : my_list) { std::cout << x << '\n'; } return 0; }
आउटपुट:
कोड का स्क्रीनशॉट यहां है:
कोड स्पष्टीकरण:
- इसके कार्यों का उपयोग करने के लिए एल्गोरिथ्म हेडर फ़ाइल को शामिल करें।
- इसके कार्यों का उपयोग करने के लिए iostream हेडर फ़ाइल को शामिल करें।
- इसके कार्यों का उपयोग करने के लिए सूची हेडर फ़ाइल को शामिल करें.
- अपने प्रोग्राम में std नामस्थान को शामिल करें ताकि उसे कॉल किए बिना उसकी कक्षाओं का उपयोग किया जा सके।
- main() फ़ंक्शन को कॉल करें। प्रोग्राम लॉजिक को इस फ़ंक्शन के मुख्य भाग में जोड़ा जाना चाहिए।
- 4 पूर्णांकों के सेट के साथ my_list नामक एक सूची बनाएं।
- कंसोल पर कुछ पाठ प्रिंट करें.
- लूप वैरिएबल x बनाने के लिए for लूप का उपयोग करें। इस वैरिएबल का उपयोग सूची तत्वों पर पुनरावृत्ति करने के लिए किया जाएगा।
- कंसोल पर सूची के मानों को प्रिंट करें.
- फॉर लूप के मुख्य भाग का अंत.
- एक इटरेटर i बनाएं जो सूची के पहले तत्व की ओर इशारा करता है।
- इटरेटर i द्वारा इंगित इरेज़() फ़ंक्शन का उपयोग करें।
- कंसोल पर कुछ पाठ प्रिंट करें.
- लूप वैरिएबल x बनाने के लिए for लूप का उपयोग करें। इस वैरिएबल का उपयोग सूची तत्वों पर पुनरावृत्ति करने के लिए किया जाएगा।
- कंसोल पर सूची के मानों को प्रिंट करें। यह डिलीट करने के बाद आता है।
- फॉर लूप के मुख्य भाग का अंत.
- प्रोग्राम को सफलतापूर्वक पूरा होने पर एक मान लौटाना होगा।
- main() फ़ंक्शन के मुख्य भाग का अंत.
सारांश
- std::list एक भंडारण कंटेनर है।
- यह किसी भी स्थान से एक ही समय पर आइटम को सम्मिलित करने और हटाने की अनुमति देता है।
- इसे दोहरे लिंक के रूप में क्रियान्वित किया गया है
- std::list डेटा को द्वि-दिशात्मक और क्रमिक रूप से एक्सेस किया जा सकता है।
- std::list तेज़ रैंडम एक्सेस का समर्थन नहीं करता है। हालाँकि, यह सभी दिशाओं से अनुक्रमिक एक्सेस का समर्थन करता है।
- आप std::list के सूची तत्वों को अलग-अलग मेमोरी खंडों में बिखेर सकते हैं।
- आप रनटाइम के दौरान आवश्यकतानुसार std::list को दोनों ओर से छोटा या विस्तृत कर सकते हैं।
- std::list में आइटम सम्मिलित करने के लिए, हम insert() फ़ंक्शन का उपयोग करते हैं।
- std::list से आइटम हटाने के लिए, हम eras() फ़ंक्शन का उपयोग करते हैं।