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

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;

Похожие темы