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;