Я пишу расширение Matlab с использованием библиотеки ULL C++, и я хотел бы иметь возможность инициализировать мои векторы ublas из массивов C, передаваемых интерпретатором Matlab. Как я могу инициализировать вектор ublas из массива C без (ради эффективности) явного копирования данных. Я ищу что-то вдоль следующих строк кода:Инициализация вектора ublas из массива C
using namespace boost::numeric::ublas;
int pv[10] = { 5, 5, 5, 5, 5, 5, 5, 5, 5, 5 };
vector<int> v (pv);
В общем, можно инициализировать C++ std::vector
из массива? Что-то вроде этого:
#include <iostream>
#include <vector>
using namespace std;
int main()
{
int pv[4] = { 4, 4, 4, 4};
vector<int> v (pv, pv+4);
pv[0] = 0;
cout << "v[0]=" << v[0] << " " << "pv[0]=" << pv[0] << endl;
return 0;
}
но где инициализация не будет копировать данные. В этом случае выход
v[0]=4 pv[0]=0
, но я хочу, чтобы выходной быть таким же, где обновление массива C изменяет данные указывают на С ++ вектор
v[0]=0 pv[0]=0
Кроме этого * в теории * вы могли бы создать подкласс ublas :: vector, который сделал это. Ваш подкласс может вести себя как const ublas :: vector, который никогда не может быть изменен, или вам придется переопределить все методы, связанные с изменением размера контейнера, чтобы гарантировать, что не освободите память, которая не принадлежит ей , Только полный мазохист попытается это сделать. –