2010-10-08 2 views
2

Я использую boost для матричных и векторных операций в коде, а одна из библиотек, которые я использую (CGNS), имеет массив в качестве аргумента. Как скопировать вектор в double [] в режиме boost, или, еще лучше, передать данные без создания копии?boost :: numeric :: ublas :: vector <double> и double []

Я немного новичок в C++, и я просто получаю повышение. Есть ли руководство, которое я должен прочитать с этой информацией?

ответ

3

Содержимое между любыми двумя итераторами ввода может быть скопировано в выходной итератор using the copy algorithm. Так как ublas::vector и массивы имеют итераторы интерфейсов, мы могли бы использовать:

#include <boost/numeric/ublas/vector.hpp> 
#include <algorithm> 
#include <cstdio> 

int main() { 
    boost::numeric::ublas::vector<double> v (3); 
    v(0) = 2; 
    v(1) = 4.5; 
    v(2) = 3.15; 

    double p[3]; 

    std::copy(v.begin(), v.end(), p); // <-- 

    printf("%g %g %g\n", p[0], p[1], p[2]); 

    return 0; 
} 
+0

Можно ли сделать это без копии? Ty для метода копирования! – ccook

+0

@ccook: Это деталь реализации, но вы можете использовать 'v.data(). Begin()', чтобы получить 'double *' из 'ublas :: vector '. – kennytm

+0

То, что мне нужно, спасибо! – ccook

0

Зависит от типа вовлеченного. Для std::vector вы просто убедитесь, что он не пуст, и вы можете пройти &v[0]. Скорее всего, это относится и к типам Boost, которые вы используете.

+0

Это работает для ускорения? – ccook