Sto scrivendo un'estensione Matlab utilizzando la libreria ublas di C++ e mi piacerebbe essere in grado di inizializzare i miei vettori ublas dai C array passati dall'interpeter Matlab. Come posso inizializzare il vettore ublas da un array C senza (per motivi di efficienza) copiando esplicitamente i dati. Sto cercando qualcosa lungo le seguenti righe di codice:Inizializzazione di un vettore ublas da un array C
using namespace boost::numeric::ublas;
int pv[10] = { 5, 5, 5, 5, 5, 5, 5, 5, 5, 5 };
vector<int> v (pv);
In generale, è possibile inizializzare un C++ std::vector
da un array? Qualcosa del genere:
#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;
}
ma dove l'inizializzazione non copierà i dati. In questo caso l'uscita è
v[0]=4 pv[0]=0
ma voglio l'uscita sia la stessa, dove aggiornare la matrice C modifica i dati indicavano dal vettore C++
v[0]=0 pv[0]=0
Tranne che * in teoria * potresti creare una sottoclasse di ublas :: vector che ha fatto questo. La sottoclasse potrebbe comportarsi come un const ublas :: vector che non potrebbe mai essere ridimensionato, altrimenti bisognerebbe sovrascrivere tutti i metodi coinvolti nel ridimensionamento del contenitore per assicurare che non liberasse memoria a cui non appartiene . Solo un masochista completo ci proverebbe. –