Доступ к элементам контейнеров массивов данных С++

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;

Похожие темы