<type>Field的一些问题
-
最近写程序的时候需要用到数组,但是我需要每次循环中改变数组的大小。而静态数组不能用变量声明数组大小,因此我灵机一动想到能不能用tensorField来当作数组呢?因此我做了如下尝试:
int N=10; tensorField euler(N*2,tensor(-3,-1,-1,-1,-1,-1,-1,-1,-2));
发现竟然可以定义,运行后尝试输出张量场,发现可以正确输出。因此我在想是否可以将N定义为
全局变量
,将tensorField定义为局部变量
,这样就可以在循环中改变N的大小,然后每次循环开始时重新定义张量场。从而达到我改变数组大小的目的。不过这个方法我还没有尝试,不知道是否有更好的办法??
另我又做了另一个试验,就是输出euler[1][8]
,为-2。而输出euler[1][9]
则为-3。实际上euler[1]
作为一个张量应该只有9个元素,因此euler[1][9]
是越界了,但是似乎是自动引用了euler[2][0]
,感觉就像是数组一样,没有进行越界检查,但是可以继续按着储存顺序往下引用。 -
更新一下。最近看epsilonWallFunction.C的时候发现了DynamicList(动态列表?),代码如下:
DynamicList<label> epsilonPatches(bf.size());
比较奇怪这个的用法,
bf.size()
是指边界场patch的个数,那么上述代码像是给epsilonPatches
一个大小,然而实际上epsilonPatches
一般都是少于bf.size()
的,而且是靠append往里面添加内容的,如下epsilonPatches.append(patchi);
那么
bf.size()
的作用到底是啥呢?
另外,如果这个是动态列表,是否需要显式
地释放内存呢?但是我没看见相关的delete。