Man Page slice_array.3



                       Standard C++ Library
             Copyright 1998, Rogue Wave Software, Inc.



NAME

     slice_array

      - A numeric array class for representing a BLAS-like  slice
     from a valarray.





SYNOPSIS

     #include <valarray>
     template <class T>
     class slice_array ;





DESCRIPTION

     slice_array<T>  gives  a  slice  view   into   a   valarray.
     Slice_arrays  are  only  produced by applying the slice sub-
     script operator to a valarray. The elements in a slice_array
     are  references  to  selected  elements  in the valarray (so
     changing an element in the slice_array  really  changes  the
     corresponding  element  in the valarray). A slice_array does
     not itself hold any distinct elements. The  template  cannot
     be  instantiated  directly  since  all  its constructors are
     private. However, you can easily copy  a  slice_array  to  a
     valarray  using  either the valarray copy constructor or the
     assignment operator. Reference semantics are  lost  at  that
     point.





INTERFACE

     template <class T> class slice_array {
     public:

       // types
      typedef T value_type;

       // destructor
       ~slice_array();

       // public assignment
      void operator= (const valarray<T>& array) const;
       // computed assignment
      void operator*= (const valarray<T>& array) const;
      void operator/= (const valarray<T>& array) const;
      void operator%= (const valarray<T>& array) const;
      void operator+= (const valarray<T>& array) const;
      void operator-= (const valarray<T>& array) const;
      void operator^= (const valarray<T>& array) const;
      void operator&= (const valarray<T>& array) const;
      void operator|= (const valarray<T>& array) const;
      void operator<<= (const valarray<T>& array) const;
      void operator>>= (const valarray<T>& array) const;

       // other
      void operator= (const T&);

     private:
       // constructors
      slice_array();
      slice_array(const slice_array<T>&);
       // operator =
      slice_array<T>& operator= (const slice_array<T>& array);
     };





CONSTRUCTORS

     slice_array();
     slice_array(const slice_array&);


        All slice_array constructors are private  and  cannot  be
        called  directly.  This  prevents  copy  construction  of
        slice_arrays.






ASSIGNMENT OPERATORS

     void operator=(const valarray<T>& x) const;


        Assigns values from x to the  selected  elements  of  the
        valarray that self refers to. Remember that a slice_array
        never holds any elements  itself,  it  simply  refers  to
        selected elements in the valarray used to generate it.



     slice_array<T>&
     operator=(const slice-_array<T>& x);


        Private assignment operator. Cannot be  called  directly,
        thus preventing assignment between slice_arrays.






COMPUTED ASSIGNMENT OPERATORS

     void operator*=(const valarray<T>& val) const;
     void operator/=(const valarray<T>& val) const;
     void operator%=(const valarray<T>& val) const;
     void operator+=(const valarray<T>& val) const;
     void operator-=(const valarray<T>& val) const;
     void operator^=(const valarray<T>& val) const;
     void operator&=(const valarray<T>& val) const;
     void operator|=(const valarray<T>& val) const;
     void operator<<=(const valarray<T>& val) const;
     void operator>>=(const valarray<T>& val) const;


        Applies the indicated operation using elements  from  val
        to the selected elements of the valarray that self refers
        to. Remember that a slice_array never holds any  elements
        itself;  it  simply  refers  to  selected elements in the
        valarray used to generate it.






MEMBER FUNCTIONS

     void operator= (const T& x);


        Assigns x to the selected elements of the  valarray  that
        self refers to.






EXAMPLE

     //
     // slice_array.cpp
     //
     #include "valarray.h"  // Contains a valarray
                            // stream inserter
     using namespace std;

     int main(void)
     {
      int ibuf[10] = {0,1,2,3,4,5,6,7,8,9};
      int ibuf2[5] = {1,3,5,7,9};

       // create a valarray of ints
      valarray<int>         vi(ibuf,10);
      valarray<int>         vi2(ibuf2,5);

       // print it out
      cout << vi << endl << vi2 << endl;

       // Get a slice and assign that slice to another array
      slice_array<int> sl = vi[slice(1,5,2)];
      valarray<int> vi3 = sl;

       // print out the slice
      cout << vi3 << endl;

       // Add slice from vi2 to slice of vi1
      sl += vi2;

       // print out vi1 again
      cout << vi << endl;

      return 0;
     }

     Program Output




     [0,1,2,3,4,5,6,7,8,9]
     [1,3,5,7,9]
     [1,3,5,7,9]
     [0,2,2,6,4,10,6,14,8,18]





WARNINGS

     If your compiler does not support namespaces,  then  you  do
     not need the using declaration for std.





SEE ALSO

     slice,   valarray,   gslice,    gslice_array,    mask_array,
     indirect_array