Bezdepbonusu7Программирование: статьи и ответы

Вопрос

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

Автор вопроса: ccookОтветов: 2

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

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

c++boostcgns

Ответы

Ответ 1 · рейтинг 3 · kennytm

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

Ответ 2 · Cheers and hth. - Alf

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

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы