operator==,!=,<,<=,>,>=(std::valarray)
Defined in header <valarray> | ||
template<class T > std::valarray<bool> operator==(conststd::valarray<T>& lhs, conststd::valarray<T>& rhs ); | (1) | |
template<class T > std::valarray<bool> operator==(consttypenamestd::valarray<T>::value_type& lhsv, | (2) | |
template<class T > std::valarray<bool> operator==(conststd::valarray<T>& lhs, | (3) | |
Compares each value within the numeric array with another value.
The behavior is undefined if size()!= v.size().
Contents |
[edit]Parameters
lhs, rhs | - | numeric arrays to compare |
lhsv, rhsv | - | values to compare to each element within a numeric array |
[edit]Return value
A numeric array of bool containing comparison results of corresponding elements.
[edit]Exceptions
May throw implementation-defined exceptions.
[edit]Notes
Each of the operators can only be instantiated if the following requirements are met:
- The indicated operator can be applied to type
T
. - The result value can be unambiguously converted to bool.
- The indicated operator can be applied to type
The function can be implemented with the return type different from std::valarray. In this case, the replacement type has the following properties:
- All const member functions of std::valarray are provided.
- std::valarray, std::slice_array, std::gslice_array, std::mask_array and std::indirect_array can be constructed from the replacement type.
- For every function taking a conststd::valarray<T>&except begin() and end()(since C++11), identical functions taking the replacement types shall be added;
- For every function taking two conststd::valarray<T>& arguments, identical functions taking every combination of conststd::valarray<T>& and replacement types shall be added.
- The return type does not add more than two levels of template nesting over the most deeply-nested argument type.
[edit]Example
#include <iostream>#include <valarray> int main(){// zero all negatives in a valarraystd::valarray<int> v ={1, -1, 0, -3, 10, -1, -2};std::cout<<"Before: ";for(auto n : v)std::cout<< n <<' ';std::cout<<'\n'; v[v <0]=0;std::cout<<"After: ";for(auto n : v)std::cout<< n <<' ';std::cout<<'\n'; // convert the valarray<bool> result of == to a single boolstd::valarray<int> a ={1, 2, 3};std::valarray<int> b ={2, 4, 6}; std::cout<<"2*a == b is "<<std::boolalpha<<(2* a == b).min()<<'\n';}
Output:
Before: 1 -1 0 -3 10 -1 -2 After: 1 0 0 0 10 0 0 2*a == b is true
[edit]Defect reports
The following behavior-changing defect reports were applied retroactively to previously published C++ standards.
DR | Applied to | Behavior as published | Correct behavior |
---|---|---|---|
LWG 3074 | C++98 | T is deduced from both the scalar and the valarray for (2,3),disallowing mixed-type calls | only deduce T from the valarray |