การใช้งาน std::vector
ที่มาพร้อมกับ Visual Studio 2010 และเวอร์ชันก่อนหน้านี้มีลักษณะเฉพาะที่รู้จักกันดี: วิธีการ resize
มีลายเซ็นต่อไปนี้ (สอดคล้องกับ C ++ 03):
void resize(size_type new_size, value_type value);
แทนที่จะเป็นลายเซ็นที่สอดคล้องกับ C ++ 11 ที่ใช้โดยการใช้งาน STL อื่น ๆ ส่วนใหญ่ (เช่น STL หรือ STLport ของ gcc) นานก่อน C ++ 11:
void resize(size_type new_size, const value_type& value);
ปัญหาของตัวแปรแรกคือ ในบางสถานการณ์ คอมไพล์จะล้มเหลวหาก value_type
มีข้อกำหนดการจัดตำแหน่ง:
struct __declspec(align(64)) S { ... };
std::vector<S> v; // error C2719: '_Val': formal parameter with __declspec(align('64')) won't be aligned
นี่คือดี ปัญหาที่ทราบ และไม่มีวิธีแก้ปัญหาที่น่าพอใจ นอกเหนือจากการใช้การใช้งาน std::vector
ที่แตกต่างกัน .
ฉันกำลังมองหาการใช้งาน std::vector
ที่เป็นลายลักษณ์อักษรอย่างดี ผ่านการทดสอบอย่างดี มีในตัวเอง และเข้ากันได้กับ STL พร้อมด้วยใบอนุญาตแบบ MIT ที่ฉันสามารถใส่ลงในโปรเจ็กต์ของฉันในฐานะคอนเทนเนอร์ที่เลือกได้ ประเภทที่สอดคล้อง
ฉันคิดว่าจะแยกมันออกจาก STLport หรือ STL ของ gcc แต่เนื่องจากเป็นไปตามมาตรฐานอย่างสมบูรณ์ ทั้งคู่จึงมีขนาดใหญ่และมีการพึ่งพาที่ไม่สำคัญมากมาย
(ฉันจะพอใจอย่างยิ่งกับการใช้งานชุดย่อยที่สมเหตุสมผลของ std::vector
ซึ่งจะรองรับเฉพาะ push_back
, clear
, capacity
, size
, reserve
, resize
, swap
และการจัดทำดัชนีอาร์เรย์)
มีความคิดอะไรบ้าง?
.resize()
ทำให้การประกาศstd::vector<S> v;
ล้มเหลวได้อย่างไร การสร้างอินสแตนซ์ของเทมเพลตคลาสไม่ได้สร้างอินสแตนซ์ของวิธีการ แต่เป็นเพียงวิธีที่ใช้เท่านั้น (เช่นค่าเริ่มต้น ctor และ dtor ในกรณีนี้) - person MSalters   schedule 23.02.2012