2013-02-18 44 views
1

我玩弄d阵列和我偶然发现了这一点:向量记号在d

当我编译此代码

import std.stdio; 

int main() 
{ 
    int[] a, b; 
    b ~= [2,3,4,5]; 
    a.length = b.length; 
    a[] = b[] + 4; 
    writeln(typeid(a),"\n",typeid(b)); 
    writeln(a,"\n",b); 

    int[] c, d; 
    for (int n=10; n<20; ++n) { 
    d ~= n; 

    } 
    c.length = d.length; 
    c = d[] + 2; //compile error 
    writeln(typeid(c),"\n",typeid(d)); 
    writeln(c,"\n",d); 

    return 0; 
} 

我得到一个错误在编译:

Error: Array operation d[] + 2 not implemented 

只有前几行和其余部分之间的区别在于b和d的填充方式。

我该如何使用数组操作来填充循环中的数组?

而另一个问题:

是第几行做的正确方法?行a.length = b.length;似乎有点奇怪的我。

回答

4

第一个问题:你只是在左边忘了[]c[] = d[] + 2;工程。

第二个问题:是的;矢量操作需要相同大小的数组,并且设置.length是调整数组大小的一种方法。

+0

男人,我需要休息一下! ;) – steffen 2013-02-18 12:27:20

4

只有前几行之间的区别,其余的是b和d的填充方式。

不,它不是。仔细观察。

a[] = b[] + 4; 
c = d[] + 2; //compile error 

至于这样的:

int[] a, b; 
b ~= [2,3,4,5]; 
a.length = b.length; 
a[] = b[] + 4; 

你也可以这样做:

int[] a = new int[4]; 
int[] b = [2, 3, 4, 5]; 
a[] = b[] + 4; 
+0

也感谢你 – steffen 2013-02-18 12:27:53