Main Content

C++ データ配列のコンテナー要素へのアクセス

C++ MATLAB® データ API の CellArray 型と StructArray 型は、他の MATLAB データ配列のコンテナーです。コンテナー内の各要素は、それ自体が配列です。これらの要素にアクセスするには 2 つの方法があります。

  • コンテナーの要素への参照を取得する。

  • コンテナーの要素の共有コピーを取得する。

参照による変更

所定の位置のデータを変更するには、変更するコンテナーの要素への参照を使用します。たとえば、次のコードは CellArray オブジェクト内の最初の cell の値を変更します。最初の cell は 1 行 3 列の logical 配列です。

using namespace matlab::data;

ArrayFactory f;

auto cellArr = f.createCellArray({2,2}, 
    f.createArray<bool>({1,3},{true, true, false}),                                           
    f.createCharArray("A char Array"),
    f.createScalar<int32_t>(-3374),
    f.createArray<double>({1,3},{2.2, 3.3, -4.2}));

// Get a reference to the first cell of the cell array.
TypedArrayRef<bool> ref = cellArr[0][0]; 

// Use the reference to modify the values in the cell.
for (auto& e : ref) {
    e = false;
}

このコードの実行後、cell 配列の最初の要素は各要素が false に設定された 1 行 3 列の logical 配列となります。

コンテナーからのデータのコピー

共有コピーを使用して、コンテナー内のデータにアクセスできます。共有コピーを使用すると、コンテナーからデータを取得したり、コピーのデータを変更して、変更後にそのデータが共有されないようにすることができます。コピーのデータを変更してもコンテナーのデータは変更されません。

たとえば、次のコードは CellArray にある最後の cell のコピーを作成します。これは 1 行 3 列の double 配列です。double 配列内の最初の要素を数値 5.5 に設定してコピーを変更します。この変更後、CellArray 内の値は変更されず、コピーの値は共有されなくなります。

using namespace matlab::data;

ArrayFactory f;

auto cellArr = f.createCellArray({2,2}, 
    f.createArray<bool>({1,3},{true, true, false}),
    f.createCharArray("A cell Array"),
    f.createScalar<int32_t>(-3374),
    f.createArray<double>({1,3},{2.2, 3.3, -4.2}));

// Get a shared copy of the last element of the cell array.
TypedArray<double> cpy = cellArr[1][1];
cpy[0] = 5.5;

関連するトピック