# std:: valarray class in C++

C++98 introduced a special container called valarray to hold and provide mathematical operations on arrays efficiently.

• It supports element-wise mathematical operations and various forms of generalized subscript operators, slicing and indirect access.
• As compare to vectors, valarrays are efficient in certain mathematical operations than vectors also.

Public member functions in valarray class :

1. apply() :- This function applies the manipulation given in its arguments to all the valarray elements at once and returns a new valarray with manipulated values.

2. sum() :- This function returns the summation of all the elements of valarrays at once.

```// C++ code to demonstrate the working of
// apply() and sum()
#include<iostream>
#include<valarray> // for valarray functions
using namespace std;
int main()
{
// Initializing valarray
valarray<int> varr = { 10, 2, 20, 1, 30 };

// Declaring new valarray
valarray<int> varr1 ;

// Using apply() to increment all elements by 5
varr1 = varr.apply([](int x){return x=x+5;});

// Displaying new elements value
cout << "The new valarray with manipulated values is : ";
for (int &x: varr1) cout << x << " ";
cout << endl;

// Displaying sum of both old and new valarray
cout << "The sum of old valarray is : ";
cout << varr.sum() << endl;
cout << "The sum of new valarray is : ";
cout << varr1.sum() << endl;

return 0;

}
```

Output:

```The new valarray with manipulated values is : 15 7 25 6 35
The sum of old valarray is : 63
The sum of new valarray is : 88
```

3. min() :- This function returns the smallest element of valarray.

4. max() :- This function returns the largest element of valarray.

```// C++ code to demonstrate the working of
// max() and min()
#include<iostream>
#include<valarray> // for valarray functions
using namespace std;
int main()
{
// Initializing valarray
valarray<int> varr = { 10, 2, 20, 1, 30 };

// Displaying largest element of valarray
cout << "The largest element of valarray is : ";
cout << varr.max() << endl;

// Displaying smallest element of valarray
cout << "The smallest element of valarray is : ";
cout << varr.min() << endl;

return 0;

}
```

Output:

```The largest element of valarray is : 30
The smallest element of valarray is : 1
```

5. shift() :- This function returns the new valarray after shifting elements by the number mentioned in its argument. If the number is positive, left-shift is applied, if number is negative, right-shift is applied.

6. cshift() :- This function returns the new valarray after circularly shifting(rotating) elements by the number mentioned in its argument. If the number is positive, left-circular shift is applied, if number is negative, right-circular shift is applied.

```// C++ code to demonstrate the working of
// shift() and cshift()
#include<iostream>
#include<valarray> // for valarray functions
using namespace std;
int main()
{
// Initializing valarray
valarray<int> varr = { 10, 2, 20, 1, 30 };

// Declaring new valarray
valarray<int> varr1;

// using shift() to shift elements to left
// shifts valarray by 2 position
varr1 = varr.shift(2);

// Displaying elements of valarray after shifting
cout << "The new valarray after shifting is : ";
for ( int&x : varr1) cout << x << " ";
cout << endl;

// using cshift() to circulary shift elements to right
// rotates valarray by 3 position
varr1 = varr.cshift(-3);

// Displaying elements of valarray after circular shifting
cout << "The new valarray after circular shifting is : ";
for ( int&x : varr1) cout << x << " ";
cout << endl;

return 0;

}
```

Output:

```The new valarray after shifting is : 20 1 30 0 0
The new valarray after circular shifting is : 20 1 30 10 2
```

7. swap() :- This function swaps one valarray with other.

```// C++ code to demonstrate the working of
// swap()
#include<iostream>
#include<valarray> // for valarray functions
using namespace std;
int main()
{
// Initializing 1st valarray
valarray<int> varr1 = {1, 2, 3, 4};

// Initializing 2nd valarray
valarray<int> varr2 = {2, 4, 6, 8};

// Displaying valarrays before swapping
cout << "The contents of 1st valarray "
"before swapping are : ";
for (int &x : varr1)
cout << x << " ";
cout << endl;
cout << "The contents of 2nd valarray "
"before swapping are : ";
for (int &x : varr2)
cout << x << " ";
cout << endl;

// Use of swap() to swap the valarrays
varr1.swap(varr2);

// Displaying valarrays after swapping
cout << "The contents of 1st valarray "
"after swapping are : ";
for (int &x : varr1)
cout << x << " ";
cout << endl;

cout << "The contents of 2nd valarray "
"after swapping are : ";
for (int &x : varr2)
cout << x << " ";
cout << endl;

return 0;

}
```

Output:

```The contents of 1st valarray before swapping are : 1 2 3 4
The contents of 2nd valarray before swapping are : 2 4 6 8
The contents of 1st valarray after swapping are : 2 4 6 8
The contents of 2nd valarray after swapping are : 1 2 3 4
```

This article is contributed by Manjeet Singh .If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

# GATE CS Corner    Company Wise Coding Practice

Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.
0 Average Difficulty : 0/5.0