मुझे पता है कि मानक एसटीएल कंटेनरों को लागू करने के तरीके को निर्देशित नहीं करता है, बल्कि यह उनमें से प्रत्येक के लिए आवश्यकताओं का एक सेट जरूरी है।कैसे एसटीएल ने कंटेनरों को अपना अंत पता किया?
हालांकि, यह व्यापक रूप से ज्ञात है कि एसटीएल आदेश दिया गया है कि आमतौर पर red–black trees के रूप में लागू किया जाता है।
आप उनके संबंधित iterators का उपयोग कर एक std::set
या एक std::map
के तत्वों के माध्यम से पुनरावृति कर सकते हैं या के बाद से सी ++ 11 छोरों का उपयोग थी।
हालांकि मुझे क्या पहेली है, एसटीएल में एक आदेशित कंटेनर "अंत" है। या इसे एक और तरीका दें, क्योंकि उन्हें पेड़ों के रूप में लागू किया गया है, कंटेनर का अंत कैसे कार्यान्वित किया गया है या यह लागू किया जा सकता है?
मुझे पता है कि मानक तय §23.2.1/सी जनरल कंटेनर आवश्यकताओं (जोर मेरा):
शुरू() पुनरावर्तक कंटेनर में पहला तत्व की चर्चा करते हुए देता है। अंत() एक पुनरावर्तक देता है जो कंटेनर के लिए पिछले-अंत-अंत मूल्य है। यदि कंटेनर खाली है, तो शुरू करें() == अंत();
ठीक है, संगत कंटेनरों के लिए यह आसान है, लेकिन पेड़ों के लिए यह "अतीत-अंत" कैसे बनाया जा सकता है?
यह समझें कि "अतीत-अंत" एक तार्किक अवधारणा है, भौतिक नहीं। इसका शाब्दिक अर्थ यह है कि जब आप अंतिम वैध प्रविष्टि से आगे बढ़ते हैं तो आपको वह इटेटरेटर मिलता है, लेकिन उस इटरेटर की आंतरिक सामग्री कुछ भी हो सकती है। –
पेड़ ट्रैवर्सल जैसे चौड़ाई-पहले और गहराई को समाप्त करने से पहले() और अंत() की प्राकृतिक धारणा है, इस प्रकार संबंधित पुनरावृत्तियों के बारे में अवधारणात्मक रूप से कुछ भी नहीं है। –
@MarkRansom मेला पर्याप्त, यह एक तार्किक अवधारणा है। लेकिन आप इस तरह की तार्किक अवधारणा को कैसे कार्यान्वित करते हैं? मेरा मतलब कोड में है। – 101010