Çok boyutlu diziler kullanmayı düşünüyorsanız, std :: array ve std :: vector arasında bir ek fark vardır. Çok boyutlu bir std :: dizisi, tıpkı ac stili dizisi gibi, tüm boyutlarda bellekte paketlenmiş elemanlara sahip olacaktır. Çok boyutlu bir std :: vektör tüm boyutlarda paketlenmeyecektir.
Aşağıdaki beyanlar dikkate alındığında:
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 stili dizideki (cConc) veya std :: dizisindeki (aConc) ilk öğeye bir işaretçi, önceki her öğeye 1 eklenerek tüm dizi boyunca yinelenebilir. Sıkıca paketlenmiştir.
Vektör dizisindeki (vConc) veya işaretçi dizisindeki (ptrConc) ilk öğeye bir işaretçi yalnızca ilk 5 (bu durumda) öğe üzerinden yinelenebilir ve daha sonra, sistem için 12 bayt (sistemimde) ek yükü vardır. sonraki vektör.
Bu, [3] [1000] dizisi olarak başlatılan bir std :: vector> dizisinin bellekte [1000] [3] dizisi olarak başlatılan dizinden çok daha küçük olacağı ve her ikisinin de bellekte bir std'den daha büyük olacağı anlamına gelir: Dizi her iki şekilde de tahsis edilir.
Bu ayrıca, bellek yükünü hesaba katmadan openGL'ye çok boyutlu bir vektör (veya işaretçi) dizisini geçemeyeceğiniz anlamına gelir, ancak çok boyutlu bir std :: dizisini openGL'ye geçirebilir ve çalışmasını sağlayabilirsiniz.
std::vector
İle karşılaştırmasıstd::array
ve terimlerin nasıl farklı olduğunu arıyorum .