API данных C++ MATLAB ®CellArray и StructArray типы являются контейнерами для других массивов данных MATLAB. Элементы в контейнерах сами являются массивами. Существует два способа доступа к этим элементам:
Получение ссылки на элементы контейнера.
Получите общую копию элементов контейнера.
Для изменения данных на месте используйте ссылку на элемент контейнера, который требуется изменить. Например, этот код изменяет значения первой ячейки в CellArray объект. Первая ячейка является логическим массивом 1 на 3.
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;
}
После выполнения этого кода первый элемент массива ячеек является логическим массивом 1 на 3, каждый элемент которого имеет значение false.
Доступ к данным в контейнере можно получить с помощью общей копии. общая копия позволяет получить данные из контейнера или изменить данные в копии, которая становится неразделенной при изменении. Изменение данных в копии не приводит к изменению данных в контейнере.
Например, этот код создает копию последней ячейки в CellArray, который является двойным массивом 1 на 3. Копия изменяется путем установки для первого элемента в двойном массиве числового значения 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;