1

私は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

2 に答える 2

4

[]最初の質問:左側を忘れましたね。c[] = d[] + 2;動作します。

2 番目の質問: はい。ベクトル操作には同じサイズの配列が必要であり、設定.lengthは配列のサイズを変更する 1 つの方法です。

于 2013-02-18T12:02:25.183 に答える
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;
于 2013-02-18T12:03:41.943 に答える