MATLAB® Data API CellArray
C++ и типы 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;