इसे कैसे लागू किया जाता है, इसे देखें। एसटीएल बड़े पैमाने पर टेम्पलेट्स बनाता है और इसलिए हेडर में वे कोड होते हैं जो वे करते हैं।
उदाहरण के लिए stdc ++ कार्यान्वयन को यहाँ देखें ।
भी भले ही दिलचस्प नहीं एक STL बिट वेक्टर अनुरूप है LLVM :: BitVector से यहाँ ।
का सार llvm::BitVector
एक नेस्टेड वर्ग है जिसे कुछ सीमाओं के साथ व्यवहार के समान reference
बनाने के लिए उपयुक्त ऑपरेटर को ओवरलोडिंग कहा जाता है । नीचे दिए गए कोड को दिखाने के लिए एक सरलीकृत इंटरफ़ेस है कि कैसे बिटवेक्टर एक वर्ग को छुपाता है जिसे वास्तविक कार्यान्वयन बनाने के लिए बुलाया जाता है, प्रत्येक मूल्य के लिए 1 बाइट का उपयोग किए बिना लगभग एक वास्तविक बूल की तरह व्यवहार करता है।BitVector
vector
reference
class BitVector {
public:
class reference {
reference &operator=(reference t);
reference& operator=(bool t);
operator bool() const;
};
reference operator[](unsigned Idx);
bool operator[](unsigned Idx) const;
};
यहाँ इस कोड में अच्छे गुण हैं:
BitVector b(10, false); // size 10, default false
BitVector::reference &x = b[5]; // that's what really happens
bool y = b[5]; // implicitly converted to bool
assert(b[5] == false); // converted to bool
assert(b[6] == b[7]); // bool operator==(const reference &, const reference &);
b[5] = true; // assignment on reference
assert(b[5] == true); // and actually it does work.
इस कोड में वास्तव में दोष है, चलाने की कोशिश करें:
std::for_each(&b[5], &b[6], some_func); // address of reference not an iterator
काम नहीं करेगा क्योंकि assert( (&b[5] - &b[3]) == (5 - 3) );
विफल हो जाएगा (भीतर llvm::BitVector
)
यह बहुत ही सरल llvm संस्करण है। std::vector<bool>
इसमें काम करने वाले पुनरावृत्तियाँ भी हैं। इस प्रकार कॉल for(auto i = b.begin(), e = b.end(); i != e; ++i)
काम करेगा। और भी std::vector<bool>::const_iterator
।
हालाँकि इसमें अभी भी कुछ सीमाएँ हैं std::vector<bool>
जो कुछ मामलों में अलग व्यवहार करती हैं।