Я использую boost для матричных и векторных операций в коде, и одна из используемых мной библиотек (CGNS) имеет массив в качестве аргумента. Как скопировать вектор в double[] ускоренным образом, или, что еще лучше, могу ли я передать данные без создания копии?
Я немного новичок в С++ и только начинаю работать с boost. Есть ли руководство, которое я должен прочитать с этой информацией?
Ответ 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, которые вы используете.