C++ valarray Library - Function operator[]



Description

It access element or subscript.

Declaration

Following is the declaration for std::valarray::operator[] function.

 T operator[] (size_t n) const;
   T& operator[] (size_t n);

C++11

 const T& operator[] (size_t n) const;
   T& operator[] (size_t n);

Parameters

  • n − It is the position of an element in the valarray.

  • slc − It is a slice object specifying which elements of the valarray are selected.

  • gslc − It is a gslice object specifying which elements of the valarray are selected.

  • msk − It is a valarray with its elements identifying whether each element of *this is selected or not: If an element in *this has its corresponding element in msk set to true it is part of the returned sub-array, otherwise it is not..

  • ind − It is a valarray with its elements identifying which elements of *this are selected: Each element in ind is the index of an element in *this that will be part of the returned sub-array.

Return Value

It returns *this.

Exceptions

Basic guarantee − if any operation performed on the elements throws an exception.

Data races

All elements effectively copied are accessed.

Example

In below example explains about std::valarray::operator[] function.

#include <iostream>
#include <valarray>

int main () {
   std::valarray<int> myarray (10);

   myarray[std::slice(2,3,3)]=10;

   size_t lengths[]={2,2};
   size_t strides[]={6,2};
   myarray[std::gslice(1, std::valarray<size_t>(lengths,2), 
      std::valarray<size_t>(strides,2))]=20;

   std::valarray<bool> mymask (10);
   for (int i=0; i<10; ++i) mymask[i]= ((i%2)==0);
   myarray[mymask] += std::valarray<int>(3,5);

   //indirect:
   size_t sel[]= {2,5,7};
   std::valarray<size_t> myselection (sel,3);
   myarray[myselection]=99;

   std::cout << "myarray: ";
   for (size_t i=0; i<myarray.size(); ++i)
      std::cout << myarray[i] << ' ';
   std::cout << '\n';

   return 0;
}

Let us compile and run the above program, this will produce the following result −

myarray: 3 20 99 20 3 99 3 99 13 20 
valarray.htm
Advertisements