我需要创建一个大小为800x800的2D int数组.但这样做会造成堆栈溢出(哈哈).
我是C++的新手,所以我应该做一些像向量的向量吗?只是将2d数组封装成一个类?
具体来说,这个数组是我在图形程序中的zbuffer.我需要为屏幕上的每个像素存储az值(因此大尺寸为800x800).
谢谢!
你需要大约2.5兆,所以只使用堆应该没问题.除非需要调整大小,否则不需要向量.有关使用"2D"堆数组的示例,请参阅C++ FAQ Lite.
int *array = new int[800*800];
(完成后别忘delete[]
了.)
到目前为止,每篇文章都为程序员留下了内存管理.这可以而且应该避免.ReaperUnreal非常接近我所做的,除了我使用矢量而不是数组,并且还使用尺寸模板参数并更改访问功能 - 哦,只是IMNSHO清理了一下:
templateclass Array2D { public: const int width = W; const int height = H; typedef typename T type; Array2D() : buffer(width*height) { } inline type& at(unsigned int x, unsigned int y) { return buffer[y*width + x]; } inline const type& at(unsigned int x, unsigned int y) const { return buffer[y*width + x]; } private: std::vector buffer; };
现在你可以在堆栈上分配这个2-D数组了:
void foo() { Array2Dzbuffer; // Do something with zbuffer... }
我希望这有帮助!
编辑:从中删除了数组规范Array2D::buffer
.感谢Andreas抓住了!