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.
CPP
#include<iostream>
#include<valarray> // for valarray functions
using namespace std;
int main()
{
valarray< int > varr = { 10, 2, 20, 1, 30 };
valarray< int > varr1 ;
varr1 = varr.apply([]( int x){ return x=x+5;});
cout << "The new valarray with manipulated values is : " ;
for ( int &x: varr1) cout << x << " " ;
cout << endl;
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
Time Complexity: O(n)
Space Complexity: O(n)
3. min() :- This function returns the smallest element of valarray. 4. max() :- This function returns the largest element of valarray.
CPP
#include<iostream>
#include<valarray> // for valarray functions
using namespace std;
int main()
{
valarray< int > varr = { 10, 2, 20, 1, 30 };
cout << "The largest element of valarray is : " ;
cout << varr.max() << endl;
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
Time Complexity: O(n)
Space Complexity: O(n)
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.
CPP
#include<iostream>
#include<valarray> // for valarray functions
using namespace std;
int main()
{
valarray< int > varr = { 10, 2, 20, 1, 30 };
valarray< int > varr1;
varr1 = varr.shift(2);
cout << "The new valarray after shifting is : " ;
for ( int &x : varr1) cout << x << " " ;
cout << endl;
varr1 = varr.cshift(-3);
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
Time Complexity: O(n)
Space Complexity: O(n)
7. swap() :- This function swaps one valarray with other.
CPP
#include<iostream>
#include<valarray> // for valarray functions
using namespace std;
int main()
{
valarray< int > varr1 = {1, 2, 3, 4};
valarray< int > varr2 = {2, 4, 6, 8};
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;
varr1.swap(varr2);
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
Time Complexity: O(n)
Space Complexity: O(n)
If you like GeeksforGeeks and would like to contribute, you can also write an article using write.geeksforgeeks.org or mail your article to review-team@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.
Whether you're preparing for your first job interview or aiming to upskill in this ever-evolving tech landscape,
GeeksforGeeks Courses are your key to success. We provide top-quality content at affordable prices, all geared towards accelerating your growth in a time-bound manner. Join the millions we've already empowered, and we're here to do the same for you. Don't miss out -
check it out now!