รายการที่ 18 ของสกอตต์เมเยอร์สหนังสือSTL มีผลบังคับใช้ 50 วิธีที่เฉพาะเจาะจงในการปรับปรุงการใช้งานของคุณของไลบรารีแม่แบบมาตรฐานกล่าวว่าเพื่อหลีกเลี่ยงการvector <bool>
ที่มันไม่ได้เป็นภาชนะ STL และมันไม่ได้โดดถือbool
s
รหัสต่อไปนี้:
vector <bool> v;
bool *pb =&v[0];
จะไม่คอมไพล์ละเมิดข้อกำหนดของคอนเทนเนอร์ STL
ข้อผิดพลาด:
cannot convert 'std::vector<bool>::reference* {aka std::_Bit_reference*}' to 'bool*' in initialization
vector<T>::operator []
return type ควรจะเป็นT&
แต่ทำไมถึงเป็นกรณีพิเศษสำหรับvector<bool>
?
อะไรvector<bool>
จริงๆประกอบด้วย?
รายการกล่าวเพิ่มเติมว่า:
deque<bool> v; // is a STL container and it really contains bools
สามารถใช้เป็นทางเลือกอื่นได้vector<bool>
หรือไม่?
ใครช่วยอธิบายเรื่องนี้ได้ไหม