Access C++ Data Array Container Elements
The C++ MATLAB® Data API CellArray and StructArray
types are containers for other MATLAB Data Arrays. The elements in the containers are themselves arrays. There
are two ways to access these elements:
Get a reference to the elements of the container.
Get a shared copy of the elements of the container.
Modify By Reference
To modify data in place, use a reference to the container element that you want to
modify. For example, this code modifies the values of the first cell in the
CellArray object. The first cell is a 1-by-3 logical array.
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;
}
After running this code, the first element of the cell array is a 1-by-3 logical
array with each element set to false.
Copy Data from Container
You can access the data in a container using a shared copy. A shared copy enables you to get the data from the container or to modify the data in a copy that becomes nonshared when modified. Changing the data in a copy does not change the data in the container.
For example, this code creates a copy of the last cell in the
CellArray, which is a 1-by-3 double array. The copy is
modified by setting the first element in the double array to the numeric value
5.5. After this modification, the value in the
CellArray is unchanged and the copy is no longer a shared
value.
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;