MATLAB на C++®API- 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;