exponenta event banner

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

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;

Связанные темы