C++/Valarray/valarray slice
valarray slice
<source lang="cpp">
/* The following code example is taken from the book
* "The C++ Standard Library - A Tutorial and Reference" * by Nicolai M. Josuttis, Addison-Wesley, 1999 * * (C) Copyright Nicolai M. Josuttis 1999. * Permission to copy, use, modify, sell and distribute this software * is granted provided this copyright notice appears in all copies. * This software is provided "as is" without express or implied * warranty, and with no claim as to its suitability for any purpose. */
- include <iostream>
- include <valarray>
using namespace std; // print valarray line-by-line template<class T> void printValarray (const valarray<T>& va, int num) {
for (int i=0; i<va.size()/num; ++i) { for (int j=0; j<num; ++j) { cout << va[i*num+j] << " "; } cout << endl; } cout << endl;
} int main() {
/* valarray with 12 elements * - four rows * - three columns */ valarray<double> va(12); // fill valarray with values for (int i=0; i<12; i++) { va[i] = i; } printValarray (va, 3); // first column = second column raised to the third column va[slice(0,4,3)] = pow (valarray<double>(va[slice(1,4,3)]), valarray<double>(va[slice(2,4,3)])); printValarray (va, 3); // create valarray with three times the third element of va valarray<double> vb(va[slice(2,4,0)]); // multiply the third column by the elements of vb va[slice(2,4,3)] *= vb; printValarray (va, 3); // print the square root of the elements in the second row printValarray (sqrt(valarray<double>(va[slice(3,3,1)]))); // double the elements in the third row va[slice(2,4,3)] = valarray<double>(va[slice(2,4,3)]) * 2.0; printValarray (va, 3);
} /* 0 1 2 3 4 5 6 7 8 9 10 11 1 1 2 1024 4 5 5.7648e+006 7 8 1e+011 10 11 1 1 4 1024 4 10 5.7648e+006 7 16 1e+011 10 22 1 1 8 1024 4 20 5.7648e+006 7 32 1e+011 10 44
*/ </source>