boost :: numeric :: ublas :: vector <double>и double [] - PullRequest
2 голосов
/ 08 октября 2010

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

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

Ответы [ 2 ]

3 голосов
/ 08 октября 2010

Содержимое между любыми двумя входными итераторами можно скопировать в выходной итератор с использованием алгоритма 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;
}
0 голосов
/ 08 октября 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...