Boost В uBLAS есть все операторы, которые вам нужны для векторной арифметики.Вот пример программы, чтобы выделить его:
#include <iostream>
#include "boost/numeric/ublas/vector.hpp"
#include "boost/numeric/ublas/io.hpp"
using namespace boost::numeric::ublas;
int main()
{
vector<int> v1(4);
vector<int> v2(4);
vector<int> v3(4);
vector< std::complex<double> > v4(4);
for (size_t i = 0; i < v1.size(); i++)
v1(i) = (i + 1) * 3;
for (size_t i = 0; i < v1.size(); i++)
v2(i) = (i + 1) * 10;
for (size_t i = 0; i < v4.size(); i++)
v4(i) = std::complex<double>(v1(i), v2(i));
std::cout << "v1: " << v1 << std::endl;
std::cout << "v2: " << v2 << std::endl;
std::cout << "v3 = v2 * 3: " << (v3 = v2 * 3) << std::endl;
std::cout << "v4: " << v4 << std::endl;
std::cout << "v1 + v2: " << v1 + v2 << std::endl;
std::cout << "v1 - v2: " << v1 - v2 << std::endl;
std::cout << "v1 * 3: " << v1 * 3 << std::endl;
std::cout << "(v2 * 2) / 3: " << (v2 * 2) / 3 << std::endl;
std::cout << "v4 * 3: " << v4 * 3 << std::endl;
std::cout << "v4 + v4" << v4 + v4 << std::endl;
std::cout << "element_prod(v1, v2)" << element_prod(v1, v2) << std::endl;
std::cout << "element_div(v2, v1)" << element_div(v2, v1) << std::endl;
return 0;
}
Вот вывод, который я получил, когда скомпилировал и запустил с использованием g ++ v4.1.2:
[ublas]$ g++ -o vector vector.cpp
[ublas]$ ./vector
v1: [4](3,6,9,12)
v2: [4](10,20,30,40)
v3 = v2 * 3: [4](30,60,90,120)
v4: [4]((3,10),(6,20),(9,30),(12,40))
v1 + v2: [4](13,26,39,52)
v1 - v2: [4](-7,-14,-21,-28)
v1 * 3: [4](9,18,27,36)
(v2 * 2) / 3: [4](6,13,20,26)
v4 * 3: [4]((9,30),(18,60),(27,90),(36,120))
v4 + v4[4]((6,20),(12,40),(18,60),(24,80))
element_prod(v1, v2)[4](30,120,270,480)
element_div(v2, v1)[4](3,3,3,3)