कंटेनर (सार डेटा प्रकार)

कंटेनर (कंप्यूटर विज्ञान)" यहां पुनर्निर्देश करता है। प्रारूप सिद्धांत में कंटेनरों की अमूर्त धारणा के लिए, कंटेनर (प्रारूप सिद्धांत) देखें। अन्य उपयोगों के लिए, कंटेनर (बहुविकल्पी) देखें।

कंप्यूटर विज्ञान में, एक कंटेनर एक वर्ग (कंप्यूटर विज्ञान) या डेटा संरचना है जिनके उदाहरण अन्य वस्तुओं का संग्रह हैं। दूसरे शब्दों में, वे वस्तुओं को एक संगठित तरीके से संग्रहीत करते हैं जो विशिष्ट अभिगम्य नियमों का अनुसरण करते हैं।

कंटेनर का आकार इसमें सम्मिलित वस्तुओं (तत्वों) की संख्या पर निर्भर करता है। विभिन्न कंटेनर प्रकारों के अंतर्निहित (इन्हेरिटेड) कार्यान्वयन आकार, जटिलता और भाषा के प्रारूपो में भिन्न हो सकते हैं, लेकिन कई स्थितियों में वे किसी भी परिदृश्य के लिए सही कार्यान्वयन को चयन करने में नम्यता प्रदान करते हैं।

कंटेनर डेटा संरचनाएं सामान्य रूप से कई प्रकार की प्रोग्रामिंग भाषाओं में उपयोग की जाती हैं।

कार्य और गुण
कंटेनरों को निम्नलिखित तीन गुणों द्वारा चित्रित किया जा सकता है:
 * अभिगम्य, अर्थात कंटेनर की वस्तुओं तक अभिगम्यता का तरीका है। सरणियों की स्थिति में, ऐरे इंडेक्स (अनुक्रमणिका) के साथ अभिगम्य किया जाता है। स्टैक की स्थिति में, एलआईएफओ (कंप्यूटिंग) (अंतिम अंदर प्रथम बाहर) क्रम के अनुसार अभिगम्य की जाती है और श्रेणी की स्थिति में यह फीफो (कंप्यूटिंग और इलेक्ट्रॉनिक्स) (पहले अंदर, पहले बाहर) क्रम के अनुसार किया जाता है ;
 * भंडारण, अर्थात कंटेनर की वस्तुओं को संग्रहित करने का तरीका है;
 * ट्रैवर्सल, अर्थात कंटेनर की वस्तुओं को ट्रैवर्स करने का तरीका है।

निम्नलिखित करने के लिए कंटेनर क्लासेस से बनाएं, पढ़ें, अपडेट करें और हटाएं (सीआरयूडीजैसी) विधियों को प्रयुक्त करने की अपेक्षा की जाती है:
 * एक रिक्त कंटेनर (निर्माता) बनाएं;
 * वस्तुओं को कंटेनर में डालें;
 * कंटेनर से वस्तुओं (ऑब्जेक्ट्स) को हटा दें;
 * कंटेनर में सभी वस्तुओं को हटा दें (स्पष्ट);
 * कंटेनर में वस्तुओं तक पहुंचें;
 * कंटेनर में वस्तुओं की संख्या तक पहुँचें (गिनती)।

कंटेनरों को कभी-कभी पुनरावृत्तियों के साथ संयोजन में कार्यान्वित किया जाता है।

प्रकार
कंटेनरों को सिंगल-वैल्यू कंटेनर या सहयोगी कंटेनर के रूप में वर्गीकृत किया जा सकता है।

सिंगल-वैल्यू कंटेनर प्रत्येक ऑब्जेक्ट को स्वतंत्र रूप से संग्रह करते हैं। भाषा लूप निर्माण (जैसे लूप के लिए) या पुनरावर्तक के साथ वस्तुओं को सीधे एक्सेस किया जा सकता है।

एक साहचर्य कंटेनर कुंजी-मूल्य जोड़े से बना एक साहचर्य सरणी, मानचित्र या शब्दकोश का उपयोग करता है, जैसे कि प्रत्येक कुंजी कंटेनर में अधिकतम एक बार दिखाई देती है। कुंजी का उपयोग मूल्य, वस्तु को खोजने के लिए किया जाता है, यदि यह कंटेनर में संग्रहीत है। साहचर्य कंटेनरों का उपयोग प्रोग्रामिंग भाषाओं में क्लास टेम्प्लेट के रूप में किया जाता है।

कंटेनर सार डेटा प्रकारों में सम्मिलित हैं:


 * कतार (सार डेटा प्रकार)
 * ढेर (सार डेटा प्रकार)
 * प्राथमिकता कतारें
 * तालिका देखो (LUTs)
 * साहचर्य सरणी | कुंजी-संबद्ध डेटा संरचनाएं
 * सेट (सार डेटा प्रकार), मूल्य या विशिष्ट संपत्ति द्वारा वस्तुओं को युक्त और अनुक्रमित करना;
 * मानचित्र (कंप्यूटर विज्ञान), प्रत्येक कुंजी को लुकअप के लिए एक मान से संबद्ध करता है

इन सार प्रकारों को प्रयुक्त करने के लिए उपयोग की जाने वाली सामान्य डेटा संरचनाओं में सम्मिलित हैं:
 * सरणी डेटा संरचना और उनके डेरिवेटिव
 * लिंक्ड सूचियाँ
 * बाइनरी सर्च ट्री (BSTs), विशेष रूप से सेल्फ-बैलेंसिंग बाइनरी सर्च ट्री | सेल्फ-बैलेंसिंग BSTs
 * हैश तालिका

ग्राफिक कंटेनर
विजेट टूलकिट कंटेनर का भी उपयोग करते हैं, जो अन्य विजेट जैसे विंडो (कंप्यूटिंग), पैनल (कंप्यूटर सॉफ्टवेयर) को समूहित करने के लिए विशेष विजेट (कंप्यूटिंग) हैं। उनके ग्राफिकल गुणों के अलावा, उनके पास कंटेनर क्लासेस के समान व्यवहार है, क्योंकि वे अपने बच्चों के विजेट (कंप्यूटिंग) की एक सूची रखते हैं, और अपने बच्चों के बीच विजेट (कंप्यूटिंग) को जोड़ने, हटाने या पुनर्प्राप्त करने की स्वीकृति देते हैं।

वैधानिक रूप से टाइप की गई भाषाओं में
कंटेनर एब्सट्रैक्शन वस्तुतः किसी भी प्रोग्रामिंग भाषा में लिखा जा सकता है, चाहे उसका टाइप सिस्टम कुछ भी हो। हालांकि, मजबूत और कमजोर टाइपिंग|दृढ़ता से टाइप की गई वस्तु-उन्मुख प्रोग्रामिंग भाषाओं में एक डेवलपर के लिए पुन: प्रयोज्य सजातीय कंटेनर लिखना कुछ जटिल हो सकता है।

तत्व प्रकारों में अंतर के कारण यह प्रत्येक मौलिक प्रकार के लिए लिखने और कंटेनरों का संग्रह रखने की एक कठिन प्रक्रिया में परिणत होता है। कई तात्विक प्रकार (जैसे पूर्णांक या फ्लोटिंग नंबर) एक दूसरे के साथ स्वाभाविक रूप से असंगत होते हैं क्योंकि वे मेमोरी आकार और उनके अर्थपूर्ण अर्थ के कारण होते हैं और इसलिए विभिन्न कंटेनरों की आवश्यकता होती है (विशेष रूप से, वे पारस्परिक रूप से संगत या परिवर्तनीय हैं)। आधुनिक प्रोग्रामिंग भाषाएँ समस्या को हल करने में सहायता करने के लिए विभिन्न दृष्टिकोण प्रदान करती हैं:
 * यूनिवर्सल बुनियादी प्रकार
 * एक प्रकार जो सार्वभौमिक रूप से किसी अन्य (जैसे रूट ऑब्जेक्ट क्लास) द्वारा असाइन किया जा सकता है।
 * डाउनकास्टिंग;
 * कक्षा प्रतिस्थापन
 * कमजोर टाइप की गई भाषाओं के लिए उपरोक्त पिछले तीन दृष्टिकोणों का उपयोग किया जाता है; ये सामान्य रूप से इन्हेरिटेड और बहुरूपता को प्रकारों द्वारा साझा करते हैं।
 * संघ प्रकार (C/C++ भाषा)
 * विभिन्न प्रकार के डेटा आकारों के भंडारण की स्वीकृति देता है; हालांकि, यह सुनिश्चित करना कठिन है कि पुनर्प्राप्ति पर संघ में किस प्रकार का संग्रह किया जाता है और इसका सावधानीपूर्वक अनुसरण किया जाना चाहिए।
 * प्रकार रूपांतरण
 * टेम्पलेट (सी ++)C++)s या सामान्य प्रोग्रामिंग
 * पुन: प्रयोज्यता और प्रकार की सुरक्षा सुनिश्चित करता है; रिवर्स इन्हेरिटेड के रूप में सोचा जा सकता है। हालांकि, इस दृष्टिकोण को एक टेम्पलेट विशेषज्ञता को प्रयुक्त करने की आवश्यकता हो सकती है जो प्रतिष्ठित रूप से एक समय लेने वाली प्रक्रिया है जो उनके तरीकों में भिन्न होती है।

यह भी देखें

 * डेटा संरचनाओं की सूची
 * मानक टेम्प्लेट लाइब्रेरी#कंटेनर
 * संग्रह (सार डेटा प्रकार)
 * स्टैक (डेटा संरचना)
 * जावा समवर्ती मानचित्र

बाहरी संबंध

 * Container Data Structure Declaration and Initialization

Ujo Container (programação) Wisina