有几种方式可以在没有内存操作的情况下在C和STL中定义2D数组,以下代码说明了两种不同的方法:
int main () { /************** 1 2 3 4 5 6 ***************/ // Method 1 const int ROW = 2; const int COL = 3; int array1[ROW][COL]; for(int i=0; i<ROW; i++) for(int j=0; j<COL; j++) array1[i][j] = i*COL+j+1; // Method 2 typedef vector<vector<int> > ARRAY; ARRAY array2; vector<int> rowvector; for(int i=0; i<ROW; i++) { rowvector.clear(); for(int j=0; j<COL; j++) rowvector.push_back(i*COL+j+1); array2.push_back(rowvector); } return 0; }
我的问题是:还有其他方法可以定义2D数组吗?哪一个是最有效率的?谢谢!
解决方法
are there other ways to define the 2D array?
没有没有明确地操纵内存(malloc / free).如果使用静态分配的数组(第一个示例),则在编译时分配空间,因此在运行时不能添加更多行或列.
第二个例子使用std :: vector隐藏你的动态内存分配.这样,您最终可以在运行时添加更多行或列.
如果您不需要动态修改数组维度,那么第一个解决方案是更简单和更快捷的解决方案(即使我认为std :: vector实现足够快,可以与静态数组相媲美,更优雅和更面向对象).
如果您需要在运行时使用std :: vector修改数组维度,因为它可以节省您直接处理malloc和free.