Mega Code Archive

 
Categories / C++ / Valarray
 

Valarray slice

/* 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  */