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;