Lihatlah bagaimana ini diterapkan. STL sangat banyak dibangun di atas template dan oleh karena itu header berisi kode yang mereka lakukan.
misalnya lihat implementasi stdc ++ di sini .
juga menarik meskipun bukan vektor bit sesuai stl adalah llvm :: BitVector dari sini .
inti dari llvm::BitVectorini adalah kelas bersarang yang dipanggil referencedan operator yang overloading cocok untuk membuat BitVectorperilaku serupa vectordengan beberapa batasan. Kode di bawah ini adalah antarmuka yang disederhanakan untuk menunjukkan bagaimana BitVector menyembunyikan kelas yang dipanggil referenceuntuk membuat implementasi nyata hampir berperilaku seperti array bool nyata tanpa menggunakan 1 byte untuk setiap nilai.
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;
};
kode ini di sini memiliki properti yang bagus:
BitVector b(10, false);
BitVector::reference &x = b[5];
bool y = b[5];
assert(b[5] == false);
assert(b[6] == b[7]);
b[5] = true;
assert(b[5] == true);
Kode ini sebenarnya memiliki kekurangan, coba jalankan:
std::for_each(&b[5], &b[6], some_func);
tidak akan berfungsi karena assert( (&b[5] - &b[3]) == (5 - 3) );akan gagal (dalam llvm::BitVector)
ini adalah versi llvm yang sangat sederhana. std::vector<bool>juga bekerja iterator di dalamnya. dengan demikian panggilan itu for(auto i = b.begin(), e = b.end(); i != e; ++i)akan berhasil. dan juga std::vector<bool>::const_iterator.
Namun masih ada batasan std::vector<bool>yang membuatnya berperilaku berbeda dalam beberapa kasus.