2011-05-12 13 views
35

(जब मैं एसटीएल कहता हूँ, मैं टेम्पलेट लायब्रेरी कि चारों ओर कंटेनर, iterators, एल्गोरिदम और functors घूमती है के बारे में बात कर रहा हूँ।)
इस सवाल के साथ, यह सोच कर एक सामान्य कंटेनर की तरह है कि एक std::string ज्यादातर बर्ताव के बाद मन में आया begin और end कार्य (इटरेटर सहित), एक size समारोह और संभावना सामान्य एसटीएल एल्गोरिदम कि कंटेनर पर काम के लिए उन सभी का उपयोग करने/उनकी iterators (जैसे transform, sort, find, आदि) के माध्यम से होती है।एसटीएल का std :: स्ट्रिंग हिस्सा है?

हालांकि, यह एक कंटेनर स्वयं नहीं है, क्योंकि यह कंटेनरों की तस्वीर में फिट नहीं है जो आर्बिटरी डेटा स्टोर करते हैं। साथ ही, यह सदस्य कार्यों के माध्यम से अधिकतर निहित डेटा पर संचालित होता है, जैसे substr, find_first_of, आदि, जबकि वास्तविक कंटेनर ऐसा नहीं करते हैं और एल्गोरिदम इसे संभालते हैं।

इसके अतिरिक्त, cplusplus reference site और सी ++ मानक std::string को वास्तविक कंटेनर के साथ सूचीबद्ध नहीं करता है, लेकिन एक अलग श्रेणी में।
हालांकि, SGI's STL site, basic_string (और इसके परिणामस्वरूप string टाइपपीफ) का उल्लेख अन्य कंटेनर के साथ किया गया है और basic_string reference site बताता है कि यह "कंटेनर" श्रेणी से संबंधित है।

अब मेरा प्रश्न है, string वास्तव में एसटीएल का हिस्सा है या यह एक अलग पुस्तकालय है?
और यदि यह अब एसटीएल से संबंधित है, तो क्या यह स्टेपानोव द्वारा विकसित मूल एसटीएल में भिन्न था?

+9

ऐतिहासिक जिज्ञासा के अलावा, इस बिंदु पर एसटीएल की परवाह कौन करता है? – ildjarn

+4

@ildjarn: ठीक है, मुझे ज्ञान जमा करना पसंद है। : पी भी, उस छोटे 'इतिहास' टैग को देखें? :) मुझे बस इस तरह की चीजों में दिलचस्पी है, इसलिए मैं इसके लिए पूछता हूं। – Xeo

+1

आह, मेला, मुझे वास्तव में 'इतिहास' टैग नहीं मिला: -] – ildjarn

उत्तर

25

नहीं, वास्तव में नहीं। और हाँ, तरह का।

There are varying definitions of "the STL", सहित:

  • वास्तविक एचपी/एसजीआई एसटीएल, मूल पुस्तकालय है, जो के कुछ हिस्सों सी ++ स्टैंडर्ड लाइब्रेरी पर आधारित था। उनमें कंटेनर, इटरेटर और एल्गोरिदम शामिल थे। स्ट्रिंग्स इस का एक हिस्सा थे।

  • एसजीआई एसटीएल लाइब्रेरी पर आधारित सी ++ मानक पुस्तकालय के कुछ हिस्सों: कंटेनर, इटरेटर और एल्गोरिदम। अभी भी कोई तार नहीं है।

  • सभी सी ++ मानक पुस्तकालय। इस परिभाषा में तर्क या वास्तविकता में बिल्कुल कोई ग्राउंडिंग नहीं है, हालांकि, अगर std::string शामिल किया जाएगा।

ध्यान दें कि वास्तविक एसटीएल विकसित किया गया है के बाद से सी ++ मानकीकरण किया गया था (कुछ 13 साल पहले, याद), और वे सामान है कि तार की तरह मानक में चला गया, में से कुछ पीछे की ओर-अपनाया है। यह का अर्थ यह नहीं है कि वे मूल रूप से वहां 1998 में थे ... लेकिन वे अब "संगतता" कारणों के लिए हैं।


सारांश

एसटीएल कंटेनर, एल्गोरिदम और iterators था।

स्ट्रिंग और स्ट्रीम सी ++ 98 के लिए अपनाए गए थे, फिर पीछे की ओर - आधुनिक एसजीआई एसटीएल के लिए तैयार किया गया।

क्या तार "एसटीएल का हिस्सा" हैं या नहीं, इस पर निर्भर करता है कि आप तर्क और कारण का पालन करते हैं या मानक पुस्तकालय "एसटीएल" कहते हैं।

उम्मीद है कि इससे मदद मिलती है।

+0

बस एक मामूली नोट: कम से कम इसे मूल रूप से वितरित किया गया था, एचपी एसटीएल वास्तव में * किया * * 'bstring' (मूल स्ट्रिंग) वर्ग ('basic_string' के लिए गलत नहीं होना चाहिए) शामिल है, हालांकि मुझे याद है कि यह वास्तव में केवल वहां था इसलिए उन्हें सौदा नहीं करना पड़ेगा छोटे डेमो कार्यक्रमों में सी-स्टाइल स्ट्रिंग के साथ (लेकिन वे स्पष्ट रूप से अपने स्वयं के अद्वितीय स्ट्रिंग क्लास वाले प्रत्येक कंपाइलर से निपटना नहीं चाहते थे)। –

2

यह वास्तव में एसटीएल का हिस्सा है। और std :: स्ट्रिंग सिर्फ typedef मूलभूत है। यह कंटेनर है, विशिष्ट (सी ++ "विशेषज्ञता" अर्थ में नहीं :) :) स्ट्रिंग semantics के साथ डेटा भंडारण के लिए। हालांकि Stepanov के बारे में कोई विचार नहीं है। उल्लेख करने योग्य मूल्य यह है कि एसटीएल "मानक टेम्पलेट लाइब्रेरी" है, न केवल कंटेनर उपpart। इसमें एल्गोरिदम, धाराएं और कुछ लक्षण शामिल हैं।

+0

@Xeo: हुह? स्ट्रीम, एल्गोरिदम और इटरेटर्स ठीक वही चीजें हैं जिन्हें मानक के लिए एसटीएल से अनुकूलित किया गया था। –

+0

@ टोमालक: ओह, धाराएं। अब मैंने इसे IOstreams के रूप में पढ़ा है, हो सकता है क्योंकि आपके पास पहले भी आपके अन्य उत्तर में यह गलत था ..> _> " – Xeo

+0

@Xeo: अंतर हो रहा है ...? –

9

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

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

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^