2013-02-18 43 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