2

これは十分に単純なはずですが、そうではありません。

import std.container, std.stdio;

void main(){

  alias Array!double _1D;
  alias Array!_1D _2D;

  _1D a = _1D();
  _2D b = _2D();
  a.insert(1.2);
  a.insert(2.2);
  a.insert(4.2);
  b.insert(a);
  writeln(b[0][]);  // prints [1.2, 2.2, 4.2], then throws exception

  _2D c = _2D();
  c.insert(_1D());
  c[0].insert(3.3);
  c[0].insert(2.2);
  c[0].insert(7.7);
  writeln(c[0][]);  // prints []
}
4

1 に答える 1

2

動的配列のサイズを事前に宣言するために、この質問によって手がかりを得た別の方法は次のとおりです。

auto matrix = new double[][](3, 2);  // elements can be appended/removed

任意に要素を追加する方法に応じて、さまざまな方法がありますが。もちろん、プログラムに最適なスタイルを選択する必要がありますが、いくつかの可能性があります。

double[][] matrix = [[1.1, 1.2], [2.3, 2.4], [3.5, 3.6]];

また

double[][] matrix;
matrix ~= [1.1, 1.2];
matrix ~= [2.3, 2.4];
matrix ~= [3.5];
matrix[2] ~= 3.6;

また

double[][] matrix = new double[][](1,0);
matrix[0].length = 2;
matrix[0][0] = 1.1;
matrix[0][1] = 1.2;

++matrix.length;
matrix[1] ~= 2.3;
matrix[1] ~= 2.4;

matrix ~= new double[](0);
matrix[$-1] ~= [3.5, 3.6];

最後に、コンパイル時に配列のサイズが変更されないことがわかっている場合は、代わりに静的配列を作成できます。

double[2][3] staticMatrix;            // size cannot be changed

ただし、これらはすべて自然な組み込み配列メカニズムを使用します。Array コンテナー クラスを使用する必要がある特定の理由はありますか?

于 2012-01-06T11:08:45.203 に答える