Skip to content
Related Articles
std:: valarray class in C++
• Difficulty Level : Medium
• Last Updated : 04 May, 2020

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``#include // 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``#include // 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``#include // 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``#include // 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.

Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above.

Want to learn from the best curated videos and practice problems, check out the C++ Foundation Course for Basic to Advanced C++ and C++ STL Course for foundation plus STL.  To complete your preparation from learning a language to DS Algo and many more,  please refer Complete Interview Preparation Course.

My Personal Notes arrow_drop_up