Armadillo C ++ - инициализация матрицы только для чтения из постоянной памяти без копирования - PullRequest
1 голос
/ 10 февраля 2020

Очень хороший ответ о том, как создать матрицу Armadillo вокруг существующей памяти, приведен здесь: armadillo C ++: инициализация матрицы из массива .

Однако у меня есть ситуация, в которой я хотел бы создать матрицу Armadillo из константного массива без предварительного копирования данных. Первая часть проста:

  • mat (const aux_mem *, n_rows, n_cols)

Создание матрицы путем копирования данных из вспомогательной памяти только для чтения.

Однако при этом сначала копируется память, что в моем случае было бы ненужным.

Я хотел бы иметь что-то вроде этого:

const double* ptr = start; // I cannot modify the source of this pointer

const amra::mat M(ptr, 4, 4, /*copy*/ false, /*strict*/ true); 

Однако это точного конструктора не существует. Есть ли альтернативный метод, который мне не хватает?

1 Ответ

1 голос
/ 10 февраля 2020

Используйте const_cast , чтобы удалить квалификатор const из указателя.

В вашем случае это const arma::mat M(const_cast<double*>(ptr), 4, 4, false, true);

...