boost::numeric::ublas::vector‹double› и double[]

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

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


person ccook    schedule 08.10.2010    source источник


Ответы (2)


Содержимое между любыми двумя входными итераторами можно скопировать в выходной итератор с использованием алгоритма copy. Поскольку и 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;
}
person kennytm    schedule 08.10.2010
comment
@ccook: это деталь реализации, но вы можете использовать v.data().begin(), чтобы получить double* из ublas::vector<double>. - person kennytm; 08.10.2010

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

person Cheers and hth. - Alf    schedule 08.10.2010