Copying std::vector contents to TypedArray

17 visualizaciones (últimos 30 días)
David Moore
David Moore el 29 de Jun. de 2020
Editada: Paulo Urriza el 16 de Mayo de 2023
Is there a better way to copy the contents of a std::vector to a Matlab Array in C++? The following seems long winded.
V is a std::vector in the code below.
matlab::data::ArrayFactory factory;
matlab::data::TypedArray<double> A = factory.createArray<double>({ 1, V.size() });
int i = 0;
for (auto e : V) {
A[i++] = e;
}

Respuesta aceptada

Breno Vincenzo de Almeida
Breno Vincenzo de Almeida el 20 de Sept. de 2020
I managed to do this out after hooours of testing.
matlab::data::ArrayFactory f;
matlab::data::TypedArray<double> A = f.createArray<double>({1, V.size()}, V.data(), V.data()+V.size());
Source: the `matlab::data::ArrayFactory` page in the following link C++ class to create arrays - MATLAB.
But I can't find a way for the ItType method of supplying the data to work.
  2 comentarios
Jason Laks
Jason Laks el 19 de Feb. de 2021
The code above will not compile using the mex command from matlab's command line in R2020a. Does anyone have a code snippet that will work?
Thanks, J.
My attempt at getting the suggestion to work:
matlab::data::ArrayFactory f;
std::vector<double> V(2, 2);
matlab::data::TypedArray<double> A = f.createArray<double>({1,V.size()}, V.data(), V.data()+V.size());
Jason Laks
Jason Laks el 19 de Feb. de 2021
Wait... my apologies. The snippet above does compile.

Iniciar sesión para comentar.

Más respuestas (1)

Paulo Urriza
Paulo Urriza el 16 de Mayo de 2023
Editada: Paulo Urriza el 16 de Mayo de 2023
Type can be deduced automatically if you used the createArray overload for std::iterator.
matlab::data::ArrayFactory f;
auto A = factory.createArray({1, V.size()}, V.begin(), V.end());

Categorías

Más información sobre Call C++ from MATLAB en Help Center y File Exchange.

Etiquetas

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by