स्टैंडर्ड टेम्पलेट लाइब्रेरी

From Vigyanwiki

स्टैंडर्ड टेम्प्लेट लाइब्रेरी (एसटीएल) मुख्यतः कंप्यूटर साइंस में उपयोग की जाने वाली लाइब्रेरी है जिसे मूल रूप से अलेक्जेंडर स्टेपानोव द्वारा C ++ प्रोग्रामिंग लैंग्वेज के लिए डिज़ाइन किया गया था, जिसने C सी ++ मानक लाईब्रेरी के कई भाग को प्रभावित किया था। यह एल्गोरिदम (सी++), कंटेनर (डेटा स्ट्रक्चर), फंक्शन ऑब्जेक्ट, और इटरेटर्स नामक चार घटक प्रदान करता है।[1]

एसटीएल (एसटीएल) सी ++ के लिए सामान्य सी ++ कक्षाओं का समूह प्रदान करता है, जैसे कंटेनर और सहयोगी सरणी, जिसका उपयोग किसी भी अंतर्निहित प्रकार के साथ किया जा सकता है और किसी भी उपयोगकर्ता परिभाषित प्रकार के साथ किया जा सकता है जो कुछ प्राथमिक संचालन (जैसे प्रतिलिपि और असाइनमेंट) का समर्थन करता है। एसटीएल एल्गोरिदम कंटेनरों से स्वतंत्र होती हैं, जो लाईब्रेरी की जटिलता को अधिक कम कर देता है।

एसटीएल अपने परिणाम टेम्पलेट (प्रोग्रामिंग) के उपयोग के माध्यम से प्राप्त करता है। यह दृष्टिकोण संकलन-समय बहुरूपता प्रदान करता है जो अधिकांशतः वस्तु-उन्मुख प्रोग्रामिंग में पारंपरिक बहुरूपता से अधिक कुशल होता है। रन-टाइम बहुरूपता के लिए एसटीएल के भारी उपयोग से उत्पन्न होने वाले वर्चुअल दंड को कम करने के लिए आधुनिक सी ++ संकलक्स को ट्यून किया गया हैं।

एसटीएल को सी++ के लिए जेनेरिक एल्गोरिदम और डेटा संरचनाओं की पहली लाइब्रेरी के रूप में बनाया गया था, इस प्रकार चारों विचारों को ध्यान में रखते हुए: सामान्य प्रोग्रामिंग , एब्सट्रैक्शन (कंप्यूटर साइंस) दक्षता की हानि के बिना, वॉन न्यूमैन संरचना,[2] और मूल्य शब्दार्थ का उपयोग किया जाता हैं।

इस प्रकार हम कह सकते हैं कि एसटीएल और सी ++ मानक लाईब्रेरी दो अलग-अलग संस्थाएं हैं।[3]

इतिहास

नवंबर 1993 में अलेक्जेंडर स्टेपानोव ने सी++ मानकीकरण के लिए ANSI/ISO समिति को जेनेरिक प्रोग्रामिंग पर आधारित लाईब्रेरी प्रस्तुत करता हैं। इस समिति की प्रतिक्रिया अत्यधिक अनुकूल थी और मार्च 1994 की बैठक के लिए औपचारिक प्रस्ताव के लिए एंड्रयू कोएनिग (प्रोग्रामर) से अनुरोध के कारण प्रस्तावित हुई थी। इस समिति के पास परिवर्तन और विस्तार के लिए कई अनुरोध किए गए थे और इस समिति के सदस्यों ने विवरण तैयार करने में सहायता करने के लिए स्टेपानोव और मेंग ली से मिले थे। इसके सबसे महत्वपूर्ण विस्तार (सहयोगी कंटेनर) के लिए आवश्यकताओं को पूर्ण रूप से लागू करके सुसंगत होना दिखाया जाना था, इसके कार्य को स्टेपानोव ने डेविड मूसर को सौंप दिया था। इस प्रकार जुलाई 1994 में एएनएसआई/आईएसओ समिति की बैठक में प्रस्ताव को अंतिम स्वीकृति मिल गई थी। इसके पश्चात स्टीवैनोव और ली दस्तावेज़ 17 को ANSI/ISO सी++ प्रारूप के मानक (1, खंड 17 से 27 के भाग) में सम्मिलित किया गया।

अगस्त 1994 में हेवलेट-पैकर्ड के इंटरनेट पर स्वतंत्र रूप से उपलब्ध कराने के निर्णय के साथ एसटीएल के प्रारंभिक व्यापक प्रसार की संभावनाओं में अधिक सुधार किया था। इसके फलस्वरूप मानकीकरण प्रक्रिया के समय स्टेपानोव, ली और मूसर द्वारा विकसित यह कार्यान्वयन इसका मूल आधार बन गया था। वर्तमान समय में संकलक और लाईब्रेरी विक्रेताओं द्वारा प्रस्तुत किए जाने वाले कई कार्यान्वयन उपलब्ध हैं।

रचना

कंटेनर

एसटीएल में अनुक्रम कंटेनर (डेटा संरचना) और सहयोगी कंटेनर सम्मिलित हैं। कंटेनर ऐसी वस्तुएं हैं जो डेटा संग्रहीत करती हैं। मानक सूची (कंप्यूटिंग) में सम्मिलित रहते हैं, vector, deque, और list. मानक साहचर्य सरणी हैं। set, multiset, map, multimap, hash_set, hash_map, hash_multiset और hash_multimap कंटेनर एडेप्टर भी हैं। queue, priority_queue, और stack, जो कार्यान्वयन के रूप में अन्य कंटेनरों का उपयोग करते हुए विशिष्ट इंटरफ़ेस वाले कंटेनर के रूप में उपयोग किया जाता हैं।

कंटेनर विवरण
साधारण कंटेनर
यूग्म संयोजन कंटेनर साधारण साहचर्य कंटेनर है जिसमें उस निश्चित क्रम में 'पहले' और 'दूसरा' कहे जाने वाले डेटा तत्वों या वस्तुओं के 2-टुपल होते हैं। एसटीएल 'जोड़ी' को असाइन, कॉपी और तुलना की जा सकती है। मानचित्र या हैश_मैप (नीचे वर्णित) में आवंटित वस्तुओं की सरणी डिफ़ॉल्ट रूप से 'जोड़ी' प्रकार की होती है, जहां सभी 'पहले' तत्व अद्वितीय कुंजी के रूप में कार्य करते हैं, प्रत्येक उनके 'दूसरे' मान ऑब्जेक्ट से जुड़ा होता है।
अनुक्रम (सरणियाँ/लिंक्ड सूचियाँ): आदेशित संग्रह
वैक्टर एक गतिशील सरणी, जैसे सी सरणी (यानी, यादृच्छिक अभिगम में सक्षम) किसी ऑब्जेक्ट को डालने या मिटाने पर स्वचालित रूप से आकार बदलने की क्षमता के साथ। अंत में वेक्टर के पीछे एक तत्व डालने से परिशोधित निरंतर समय लगता है। अंतिम तत्व को हटाने में केवल स्थिर समय लगता है, क्योंकि कोई आकार परिवर्तन नहीं होता है। प्रारंभ या मध्य में सम्मिलित करना और मिटाना समय में रैखिक है।

बूल प्रकार के लिए एक विशेषज्ञता मौजूद है, जो बिट्स के रूप में बूल मानों को संग्रहीत करके स्थान के लिए अनुकूलित करती है।

सूची एक दोगुनी लिंक्ड सूची, तत्वों को सन्निहित स्मृति में संग्रहीत नहीं किया जाता है। वेक्टर से विपरीत प्रदर्शन। धीमा लुकअप और एक्सेस (रैखिक समय), लेकिन एक बार स्थिति मिल जाने के बाद, त्वरित प्रविष्टि और विलोपन (निरंतर समय)।
एस सूची एक अकेली लिंक की गई सूची, तत्वों को सन्निहित स्मृति में संग्रहीत नहीं किया जाता है। वेक्टर से विपरीत प्रदर्शन। धीमा लुकअप और एक्सेस (रैखिक समय), लेकिन एक बार स्थिति मिल जाने के बाद, त्वरित प्रविष्टि और विलोपन (निरंतर समय)। इसमें थोड़ा अधिक कुशल सम्मिलन और विलोपन है, और दोगुनी लिंक्ड सूची की तुलना में कम मेमोरी का उपयोग करता है, लेकिन केवल आगे की ओर पुनरावृत्त किया जा सकता है। इसे सी ++ मानक लाइब्रेरी में फॉरवर्ड_लिस्ट के रूप में लागू किया गया है।
डेक (डबल-एंडेड कतार) परिशोधित निरंतर समय में शुरुआत या अंत में सम्मिलन/मिटा हुआ एक वेक्टर, हालांकि डेक को बदलने के बाद इटरेटर वैधता पर कुछ गारंटी की कमी है।
कंटेनर एडाप्टर
पंक्ति पुश/पॉप/फ्रंट/बैक ऑपरेशंस के मामले में फीफो कतार इंटरफ़ेस प्रदान करता है।

कोई भी अनुक्रम सहायक संचालन front(), back(), push_back(), और pop_front() पंक्ति को तत्काल करने के लिए उपयोग किया जा सकता है जैसे list और deque).

पंक्ति की प्राथमिकता पुश/पॉप/टॉप ऑपरेशंस के मामले में प्राथमिकता कतार इंटरफ़ेस प्रदान करता है (उच्चतम प्राथमिकता वाला तत्व शीर्ष पर है)।

किसी भी रैंडम-एक्सेस सीक्वेंस सपोर्टिंग ऑपरेशंस फ्रंट (), पुश_बैक (), और पॉप_बैक () का उपयोग प्रायोरिटी_क्यू (जैसे वेक्टर और डेक) को इंस्टेंट करने के लिए किया जा सकता है। यह एक ढेर का उपयोग करके कार्यान्वित किया जाता है।

तत्वों को अतिरिक्त रूप से तुलना का समर्थन करना चाहिए (यह निर्धारित करने के लिए कि किस तत्व की उच्च प्राथमिकता है और पहले पॉप किया जाना चाहिए)।

स्टैक पुश/पॉप/टॉप ऑपरेशंस के मामले में एलआईएफओ स्टैक इंटरफेस प्रदान करता है (अंतिम डाला गया तत्व शीर्ष पर है)।

बैक (), पुश_बैक (), और पॉप_बैक () का समर्थन करने वाले किसी भी अनुक्रम का उपयोग स्टैक (जैसे वेक्टर, सूची और डेक) को इंस्टेंट करने के लिए किया जा सकता है।

सहयोगी कंटेनर: अनियंत्रित संग्रह
समूह एक गणितीय समूह, किसी समूह में तत्वों को डालने/मिटाने से समूह में इंगित करने वाले इटरेटर्स को अमान्य नहीं किया जाता है। समूह ऑपरेशंस यूनियन, अंतः खण्ड, अंतर, सममित अंतर और समावेशन का परीक्षण प्रदान करता है। डेटा का प्रकार लागू होना चाहिए तुलना ऑपरेटर < या कस्टम तुलनित्र फ़ंक्शन निर्दिष्ट होना चाहिए, ऐसे तुलना ऑपरेटर या तुलनित्र फ़ंक्शन को कठोर कमजोर ऑर्डरिंग की गारंटी देनी चाहिए, अन्यथा व्यवहार अपरिभाषित है। सामान्यतः स्व-संतुलन बाइनरी सर्च ट्री का उपयोग करके कार्यान्वित किया जाता है।
बहु समूह एक समूह के समान, लेकिन डुप्लिकेट तत्वों (गणितीय मल्टीसमूह) की अनुमति देता है।
मैप एक सहयोगी सरणी, एक डेटा आइटम (एक कुंजी) से दूसरे (एक मान) में मैपिंग की अनुमति देता है। कुंजी का प्रकार लागू होना चाहिए तुलना ऑपरेटर < या कस्टम तुलनित्र फ़ंक्शन निर्दिष्ट होना चाहिए, ऐसे तुलना ऑपरेटर या तुलनित्र फ़ंक्शन को सख्त कमजोर ऑर्डरिंग की गारंटी देनी चाहिए, अन्यथा व्यवहार अपरिभाषित है। आमतौर पर स्व-संतुलन बाइनरी सर्च ट्री का उपयोग करके कार्यान्वित किया जाता है।
multimap मानचित्र के समान, लेकिन डुप्लिकेट कुंजियों की अनुमति देता है।
hash_set
hash_multiset
hash_map
hash_multimap
क्रमशः एक समूह, मल्टीसमूह, मैप या मल्टीमैप के समान, लेकिन हैश टेबल का उपयोग करके कार्यान्वित किया गया, कुंजियों का आदेश नहीं दिया गया है, लेकिन कुंजी प्रकार के लिए एक हैश फ़ंक्शन मौजूद होना चाहिए। इन प्रकारों को सी++ मानक से बाहर रखा गया था, समान कंटेनरों को सी++11 में मानकीकृत किया गया था, लेकिन अलग-अलग नामों से (unordered_set and unordered_map).
अन्य प्रकार के कंटेनर
बिटसमूह बूल के एक निश्चित आकार के वेक्टर के समान बिट्स की श्रृंखला संग्रहीत करता है। बिटवाइज़ ऑपरेशंस को लागू करता है और इसमें इटरेटर्स की कमी होती है। क्रम नहीं। रैंडम एक्सेस प्रदान करता है।
valarray एक अन्य सरणी डेटा प्रकार, संख्यात्मक उपयोग के लिए अभिप्रेत है (विशेष रूप से वैक्टर और मैट्रिसेस का प्रतिनिधित्व करने के लिए), सी ++ मानक इस इच्छित उद्देश्य के लिए विशिष्ट अनुकूलन की अनुमति देता है। जोसुटिस के अनुसार,  वैलार्रे को "उन लोगों द्वारा बुरी तरह से डिज़ाइन किया गया था, जिन्होंने [सी++ मानक] समिति को मानक समाप्त होने से बहुत पहले छोड़ दिया था", और अभिव्यक्ति टेम्प्लेट लाइब्रेरी को प्राथमिकता दी जानी चाहिए।[4] इस नस में मानक के वैलेरे भाग के प्रस्तावित पुनर्लेखन को अस्वीकार कर दिया गया था, इसके अतिरिक्त अभिव्यक्ति टेम्पलेट का उपयोग करके इसे लागू करने की अनुमति बन गई.[5]

इंटरेटर

एसटीएल पांच अलग-अलग प्रकार के पुनरावृत्तियों को लागू करता है। ये इनपुट इटरेटर हैं (जिनका उपयोग केवल मानों के अनुक्रम को पढ़ने के लिए किया जा सकता है), आउटपुट इटरेटर्स (जिनका उपयोग केवल मानों के अनुक्रम को लिखने के लिए किया जा सकता है), फॉरवर्ड इटरेटर्स (जिन्हें पढ़ा जा सकता है, लिखा जा सकता है और आगे बढ़ सकते हैं) बिडरेक्शनल इटरेटर्स (जो फॉरवर्ड इटरेटर्स की तरह हैं, किन्तु पीछे की ओर भी जा सकते हैं) और रैंडम एक्सेस इटरेटर (जो ऑपरेशन में कितनी भी संख्या में स्वतंत्र रूप से स्थानांतरित हो सकता है)।

एक मूलभूत एसटीएल अवधारणा श्रेणी है जो पुनरावृत्तियों की जोड़ी है जो गणना की शुरुआत और अंत को निर्दिष्ट करती है, और लाइब्रेरी के अधिकांश एल्गोरिथम टेम्प्लेट जो डेटा संरचनाओं पर कार्य करते हैं, जिसमें इंटरफेस होते हैं जो रेंज का उपयोग किया जाता हैं।[6]

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

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

यह व्यापकता कई बार कीमत पर भी आती है। उदाहरण के लिए, किसी सहयोगी कंटेनर जैसे मानचित्र या समूह पर खोज करना कंटेनर द्वारा प्रदान किए गए सदस्य कार्यों को कॉल करने की तुलना में पुनरावृत्तियों का उपयोग करके बहुत धीमा हो सकता है। ऐसा इसलिए है क्योंकि साहचर्य कंटेनर के तरीके आंतरिक संरचना के ज्ञान का लाभ उठा सकते हैं, जो कि पुनरावृत्तियों का उपयोग करने वाले एल्गोरिदम के लिए अपारदर्शी होती हैं।

एल्गोरिदम

एसटीएल में खोज और छँटाई जैसी गतिविधियों को करने के लिए बड़ी संख्या में एल्गोरिदम प्रदान किए जाते हैं, प्रत्येक को निश्चित स्तर के इटरेटर की आवश्यकता होती है, इसलिए किसी भी कंटेनर पर कार्य करेगा जो पुनरावृत्तियों द्वारा इंटरफ़ेस प्रदान करता है, जैसे इसकी एल्गोरिदम खोज रहे हैं जैसे binary_search और lower_bound बाइनरी सर्च एल्गोरिथम का उपयोग करें और सॉर्टिंग एल्गोरिदम के समान यह आवश्यक है कि डेटा के प्रकार को तुलना ऑपरेटर को लागू करना चाहिए < या कस्टम तुलनित्र फ़ंक्शन निर्दिष्ट होना चाहिए, ऐसे तुलना ऑपरेटर या तुलनित्र फ़ंक्शन को सख्त कमजोर ऑर्डरिंग की गारंटी देनी चाहिए। इनके अतिरिक्त, तत्वों की श्रृंखला से ढेर बनाने के लिए एल्गोरिदम प्रदान किए जाते हैं, तत्वों की श्रेणी के लेक्सिकोग्राफिक रूप से क्रमबद्ध क्रमपरिवर्तन उत्पन्न करते हैं, क्रमबद्ध श्रेणियों को मर्ज करते हैं और संघ (समूह सिद्धांत), इंटरसेक्शन (समूह सिद्धांत), क्रमबद्ध श्रेणियों का अंतर समूह करते हैं।

कार्य

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

एक विशेष रूप से सामान्य प्रकार का फ़ंक्टर विधेय (कंप्यूटर प्रोग्रामिंग) है। उदाहरण के लिए, एल्गोरिदम जैसे find_if एकात्मक फंक्शन विधेय लें जो अनुक्रम के तत्वों पर संचालित होता है। एल्गोरिदम जैसे सॉर्ट, आंशिक_सॉर्ट, nth_element और सभी सॉर्ट किए गए कंटेनर (डेटा संरचना) बाइनरी फ़ंक्शन का उपयोग करते हैं जो सख्त कमजोर क्रम प्रदान करना चाहिए, अर्थात, यह सकर्मक, गैर-रिफ्लेक्सिव और असममित बाइनरी संबंध पर समूह सदस्यता परीक्षण की तरह व्यवहार करना चाहिए। . यदि कोई आपूर्ति नहीं की जाती है, तो ये एल्गोरिदम और कंटेनर डिफ़ॉल्ट रूप से less का उपयोग करते हैं, जो बदले में कम-से-ऑपरेटर को कॉल करता है।

आलोचना

सी ++ कंपाइलर्स के कार्यान्वयन की गुणवत्ता

सी ++ कंपाइलर के कार्यान्वयन की गुणवत्ता (क्यूओआई) का एसटीएल (और सामान्य रूप से टेम्पलेट कोड) की उपयोगिता पर बड़ा प्रभाव पड़ता है:

  • टेम्प्लेट से जुड़े त्रुटि संदेश बहुत लंबे और समझने में कठिन होते हैं। इस समस्या को इतना गंभीर माना गया है कि कई उपकरण लिखे गए हैं जो एसटीएल से संबंधित त्रुटि संदेशों को सरल और सुंदर प्रिंट करते हैं जिससे कि उन्हें और अधिक बोधगम्य बनाया जा सके।
  • टेम्प्लेट के लापरवाह उपयोग से कोड ब्लोट हो सकता है।[7] इसे एसटीएल कार्यान्वयन के भीतर विशेष विधियों के साथ काउंटर किया गया है (उदाहरण के लिए शून्य * कंटेनर आंतरिक रूप से और अन्य आहार टेम्पलेट विधियों का उपयोग करना होता हैं) और कंपाइलर्स की अनुकूलन तकनीकों में सुधार करना होता हैं। चूंकि यह लक्षण अलग प्रकार के साथ कार्य करने के लिए कार्यों के समूह को भोलेपन से मैन्युअल रूप से कॉपी करने के समान है, जिसमें देखरेख और अच्छी तकनीक से दोनों से इसे बचाया जा सकता हैं।
  • टेंपलेट इन्स्टेन्शियशन संकलन समय और मेमोरी उपयोग को बढ़ा सकता है, बदले में सामान्यतः रनटाइम निर्णय लेने को (उदाहरण के लिए आभासी कार्यों के माध्यम से) कम करता है। जब तक कंपाइलर तकनीक में पर्याप्त सुधार नहीं हो जाता, तब तक इस समस्या को सावधानीपूर्वक कोडिंग, कुछ मुहावरों से अलग और जहां वे उपयुक्त नहीं हैं या जहां संकलन-समय के प्रदर्शन को प्राथमिकता दी जाती है, वहां टेम्प्लेट का उपयोग न करके केवल आंशिक रूप से समाप्त किया जा सकता है।

अन्य विवाद

  • स्रोत कोड के भीतर स्थिरांक के साथ एसटीएल कंटेनर (डेटा संरचना) का प्रारंभ करना उतना आसान नहीं है जितना कि सी से विरासत में मिली डेटा संरचनाएं सी ++ 11 में सी++11#प्रारंभिक सूचियों के साथ संबोधित की जाती हैं।
  • एसटीएल कंटेनरों को बेस क्लास के रूप में उपयोग करने का इरादा नहीं है (उनके विध्वंसक जानबूझकर गैर-आभासी हैं), कंटेनर से प्राप्त करना सामान्य गलती है।[8][9]
  • एसटीएल द्वारा लागू किए गए पुनरावर्तकों की अवधारणा (जेनेरिक प्रोग्रामिंग) को पहले समझना कठिनाई हो सकता है: उदाहरण के लिए, यदि इटरेटर द्वारा इंगित मान हटा दिया जाता है, तो इटरेटर स्वयं मान्य नहीं होता है। यह त्रुटियों का सामान्य स्रोत है। एसटीएल के अधिकांश कार्यान्वयन डीबग मोड प्रदान करते हैं जो धीमा है, किन्तु उपयोग किए जाने पर ऐसी त्रुटियों का पता लगा सकता है। इसी तरह की समस्या अन्य भाषाओं में सम्मिलित है, उदाहरण के लिए जावा (प्रोग्रामिंग भाषा)। रेंज (कंप्यूटर साइंस) # रेंज को इटरेटर के विकल्प के रूप में सुरक्षित, इटरेटर के लिए अधिक लचीला विकल्प के रूप में प्रस्तावित किया गया है।[10]
  • कुछ पुनरावृति पैटर्न एसटीएल इटरेटर मॉडल में मैप नहीं होते हैं।[citation needed] उदाहरण के लिए, कॉलबैक एन्यूमरेशन एपीआई को कोरटाइन के उपयोग के बिना एसटीएल मॉडल में फिट करने के लिए नहीं बनाया जा सकता है,[11] जो प्लेटफ़ॉर्म-निर्भर या अनुपलब्ध हैं, और सी++ मानक के बाहर सी++20 तक होंते हैं।
  • कंपाइलर अनुपालन गारंटी नहीं देता है कि कंटेनर (डेटा संरचना) के लिए स्मृति प्रबंधन के लिए उपयोग किए जाने वाले आवंटक (सी ++)सी ++) ऑब्जेक्ट्स स्थिति-निर्भर व्यवहार के साथ कार्य करेंगे। उदाहरण के लिए, पोर्टेबल लाइब्रेरी एलोकेटर प्रकार को परिभाषित नहीं कर सकती है जो उस प्रकार के विभिन्न एलोकेटर ऑब्जेक्ट्स का उपयोग करके विभिन्न पूलों से मेमोरी खींचेगा।
  • एल्गोरिदम का समूह पूरा नहीं हुआ है: उदाहरण के लिए, copy_if एल्गोरिथ्म छोड़ दिया गया था,[12] चूंकि इसे सी++ 11 में जोड़ा जाता हैं।[13]

कार्यान्वयन

यह भी देखें

टिप्पणियाँ

  1. Holzner, Steven (2001). C++ : Black Book. Scottsdale, Ariz.: Coriolis Group. p. 648. ISBN 1-57610-777-9. The STL is made up of containers, iterators, function objects, and algorithms
  2. Musser, David (2001). STL tutorial and reference guide: C++ programming with the standard template library. Addison Wesley. ISBN 0-201-37923-6.
  3. Lightness Races in Orbit, Commnuity (5 March 2011). "What's the difference between "STL" and "C++ Standard Library"?". Stack Overflow. Retrieved 21 October 2021.
  4. Josuttis, Nicolai M. (1999). The C++ Standard Library: A Tutorial and Handbook. Addison-Wesley Professional. p. 547.
  5. Vandevoorde, David; Josuttis, Nicolai M. (2002). C++ Templates: The Complete Guide. Addison Wesley. ISBN 0-201-73484-2.
  6. Stepanov, Alexander; Lee, Meng (31 October 1995). "मानक टेम्पलेट लाइब्रेरी" (PDF). Retrieved 16 December 2018. Most of the library's algorithmic templates that operate on data structures have interfaces that use ranges. A range is a pair of iterators that designate the beginning and end of the computation. [...] in general, a range [i, j) refers to the elements in the data structure starting with the one pointed to by i and up to but not including the one pointed to by j. Range [i, j) is valid if and only if j is reachable from i.
  7. Adrian Stone. "Minimizing Code Bloat: Template Overspecialization".
  8. Meyers, Scott (2005). Effective C++ Third Edition – 55 Specific Ways to Improve Your Designs. Addison Wesley. ISBN 0-321-33487-6.
  9. Sutter, Herb; Alexandrescu, Andrei (2004). C++ Coding Standards: 101 Rules, Guidelines, and Best Practices. Addison-Wesley. ISBN 0-321-11358-6.
  10. Andrei Alexandrescu (6 May 2009). "इटरेटर्स को जाना चाहिए" (PDF). BoostCon 2009. Retrieved 19 March 2011.
  11. Matthew Wilson (February 2004). "कॉलबैक गणना एपीआई और इनपुट इटरेटर संकल्पना". Dr. Dobb's Journal.
  12. Bjarne Stroustrup (2000). सी ++ प्रोग्रामिंग भाषा (3rd ed.). Addison-Wesley. ISBN 0-201-70073-5.: p.530 
  13. More STL algorithms (revision 2)
  14. Apache C++ Standard Library. Stdcxx.apache.org. Retrieved on 2013-07-29.

संदर्भ

बाहरी संबंध