Skip to content

Latest commit

 

History

History
31 lines (22 loc) · 1.07 KB

File metadata and controls

31 lines (22 loc) · 1.07 KB

expr_vector

Class for using operations based on expression templates on std::vector, or on a provided external buffer.

It is provided inside a single header file.

It aims to be similar to std::valarray, but the option for providing an external buffer makes the computations faster, as initialization doesn't require to copy all of the elements:

std::vector<double> v(n);
...
ExprVector<double, BuffDataExt<double>> a;  // BuffDataExt<double> for using external memory
a.setBuffer(v.data(), v.size());

It supports using of python-like slices {start,end,step}:

using namespace expr_vector_default_index;

// c[0:-1:2] = a[0:-1:2] + b[1::2]
c[{0,-1,2}] = a[{0,-1,2}] + b[{1,_,2}];

Also, if python/matplotlib is present, the arrays can be plotted (however, the plot must have few points):

  ExprVector<double> x = ExprVector<double>::arange(0, 40, 0.1);
  ExprVector<double>::plot(x, sin(x) + 0.5*sin(0.5*x));

Note: this code runs in g++ and visual studio. However, visual studio is not able to fully optimize the code (it is slower than computations using raw for).