无意间想到List的一个好用法
-
以前在OpenFOAM中有个问题一直困扰我,如何建立二维动态数组。经过一段时间的C++学习,发现可以用new来开辟空间,不过比较麻烦的是,用完new后需要delete来释放内存。如果能有个简便的方法岂不是很好?
今天下午忽然灵光一闪List<type>不就相当于一维动态数组么。那么List<List<type>>会怎么样呢?int N=1 pisoloop: { N++; List<List<label>> eulerIndex(N,List<label>(16,label(-1))); Info << eulerIndex <<endl; }
竟然成功了!
N可以随着运算变化,这样就可以实现动态数组咯,哈哈 -
我验证了下如果是并行,new 和 delete是每个核单独开辟或者清除内存空间,相关代码如下:
int (*eulerIndex)[2]; eulerIndex=new int[4][2]; for(int i=0;i<4;i++) { for(int j=0;j<2;j++) { *(eulerIndex[i]+j)=-1; if(i==Pstream::myProcNo()) { *(eulerIndex[i]+j)=Pstream::myProcNo(); } } } if (Pstream::myProcNo()==2) { for(int i=0;i<4;i++) { for(int j=0;j<2;j++) { Pout<< *(eulerIndex[i]+j) <<endl; } } delete[] eulerIndex; } if (Pstream::myProcNo()==3) { for(int i=0;i<4;i++) { for(int j=0;j<2;j++) { Pout<< *(eulerIndex[i]+j) <<endl; } } } if (!Pstream::myProcNo()==2) { delete[] eulerIndex; }
结果输出:
[2] -1 [2] -1 [2] -1 [2] -1 [2] 2 [2] 2 [2] -1 [2] -1 [3] -1 [3] -1 [3] -1 [3] -1 [3] -1 [3] -1 [3] 3 [3] 3