หากคุณกำลังพิจารณาใช้อาร์เรย์หลายมิตินั่นคือความแตกต่างเพิ่มเติมระหว่าง std :: array และ std :: vector อาเรย์หลายมิติมิติ :: จะมีองค์ประกอบที่บรรจุในหน่วยความจำในทุกมิติเช่นเดียวกับอาเรย์สไตล์ ac คือ หลายมิติมาตรฐาน :: เวกเตอร์จะไม่ถูกบรรจุในทุกมิติ
รับการประกาศดังต่อไปนี้:
int cConc[3][5];
std::array<std::array<int, 5>, 3> aConc;
int **ptrConc; // initialized to [3][5] via new and destructed via delete
std::vector<std::vector<int>> vConc; // initialized to [3][5]
ตัวชี้ไปยังองค์ประกอบแรกในอาร์เรย์ c-style (cConc) หรือ std :: array (aConc) สามารถทำซ้ำผ่านทั้งอาร์เรย์ได้โดยเพิ่ม 1 ให้กับองค์ประกอบก่อนหน้า พวกเขาบรรจุแน่น
ตัวชี้ไปยังองค์ประกอบแรกในอาร์เรย์เวกเตอร์ (vConc) หรือตัวชี้อาร์เรย์ (ptrConc) สามารถทำซ้ำผ่านองค์ประกอบ 5 (ในกรณีนี้) แรกเท่านั้นจากนั้นมี 12 ไบต์ (บนระบบของฉัน) ของค่าใช้จ่ายสำหรับ เวกเตอร์ถัดไป
ซึ่งหมายความว่าอาร์เรย์ std :: vector> ที่เริ่มต้นเป็นอาร์เรย์ [3] [1000] จะมีขนาดเล็กกว่าในหน่วยความจำมากกว่าหนึ่งที่เริ่มต้นเป็นอาร์เรย์ [1000] [3] และทั้งคู่จะมีขนาดใหญ่กว่าในหน่วยความจำ std: อาร์เรย์จัดสรรวิธีใด
นอกจากนี้ยังหมายความว่าคุณไม่สามารถส่งผ่านอาร์เรย์เวกเตอร์หลายมิติ (หรือตัวชี้) ไปยังพูด OpenGL โดยไม่ต้องคำนึงถึงค่าใช้จ่ายของหน่วยความจำ แต่คุณสามารถส่งผ่าน std :: array หลายมิติไปยัง openGL ได้อย่างไร้เดียงสา
std::vector
กับstd::array
และเงื่อนไขต่างกันอย่างไร