# operator==,!=,<,<=,>,>=(std::valarray)

< cpp‎ | numeric‎ | valarray

定义于头文件 `<valarray>` |  |
template< class T > std::valarray<bool> operator==( const std::valarray<T>& lhs, const std::valarray<T>& rhs ); template< class T > std::valarray<bool> operator!=( const std::valarray<T>& lhs, const std::valarray<T>& rhs ); template< class T > std::valarray<bool> operator< ( const std::valarray<T>& lhs, const std::valarray<T>& rhs ); template< class T > std::valarray<bool> operator<=( const std::valarray<T>& lhs, const std::valarray<T>& rhs ); template< class T > std::valarray<bool> operator> ( const std::valarray<T>& lhs, const std::valarray<T>& rhs ); template< class T > std::valarray<bool> operator>=( const std::valarray<T>& lhs, const std::valarray<T>& rhs ); | (1) |
template< class T > std::valarray<bool> operator==( const typename std::valarray<T>::value_type & lhsv, const std::valarray<T>& rhs ); template< class T > std::valarray<bool> operator!=( const typename std::valarray<T>::value_type & lhsv, const std::valarray<T>& rhs ); template< class T > std::valarray<bool> operator< ( const typename std::valarray<T>::value_type & lhsv, const std::valarray<T>& rhs ); template< class T > std::valarray<bool> operator<=( const typename std::valarray<T>::value_type & lhsv, const std::valarray<T>& rhs ); template< class T > std::valarray<bool> operator> ( const typename std::valarray<T>::value_type & lhsv, const std::valarray<T>& rhs ); template< class T > std::valarray<bool> operator>=( const typename std::valarray<T>::value_type & lhsv, const std::valarray<T>& rhs ); | (2) |
template< class T > std::valarray<bool> operator==( const std::valarray<T>& lhs, const typename std::valarray<T>::value_type & rhsv ); template< class T > std::valarray<bool> operator!=( const std::valarray<T>& lhs, const typename std::valarray<T>::value_type & rhsv ); template< class T > std::valarray<bool> operator< ( const std::valarray<T>& lhs, const typename std::valarray<T>::value_type & rhsv ); template< class T > std::valarray<bool> operator<=( const std::valarray<T>& lhs, const typename std::valarray<T>::value_type & rhsv ); template< class T > std::valarray<bool> operator> ( const std::valarray<T>& lhs, const typename std::valarray<T>::value_type & rhsv ); template< class T > std::valarray<bool> operator>=( const std::valarray<T>& lhs, const typename std::valarray<T>::value_type & rhsv ); | (3) |

与另一值比较数值数组中的值。

1) 返回 bool 的数值数组，含应用指示的比较运算符到 `lhs` 与 `rhs` 的对应元素所获得的每个元素。

若 size() != v.size() 则行为未定义。

2) 返回 bool 的数值数组，含应用指示的比较运算符到 `lhsv` 与 `rhs` 的对应值所获得的每个元素。
3) 返回 bool 的数值数组，含应用指示的比较运算符到 `lhs` 的对应值与 `rhsv` 所获得的每个元素。

### 参数

lhs, rhs | - | 要比较的数值数组
lhsv, rhsv | - | 要与数值数组中每个元素比较的值

### 返回值

含对应元素比较结果的 bool 的数值数组。

### 异常

可能抛出实现定义的异常。

### 注解

仅若满足下列要求，每个运算符才能实例化：

  - 指示的运算符能应用于类型 `T` 。
  - 返回值能无歧义地转换为 `bool` 。

函数能实现为拥有不同于 std::valarray 的返回类型。此情况下，替换类型拥有下列属性：

  - 提供 std::valarray 的所有 const 成员函数。
  - 能从替换类型构造 std::valarray 、 std::slice_array 、 std::gslice_array 、 std::mask_array 和 std::indirect_array 。
  - 所有接受一个 const std::valarray& 类型参数的函数，除了 `begin()` 和 `end()` (C++11 起)也应该接受替换类型。
  - 所有接受二个 const std::valarray& 类型参数的函数都应该接受 const std::valarray& 和替换类型的每种组合。
  - 返回类型添加不多于二层嵌套在最深层嵌套的参数类型上的模板。

### 示例

    #include <iostream>
    #include <valarray>

    int main()
    {
        // 清零 valarray 中的所有负值
        std::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';

        // 转换 == 的 valarray<bool> 结果为单个 bool
        std::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';

    }

输出：

    Before: 1 -1 0 -3 10 -1 -2
    After: 1 0 0 0 10 0 0
    2*a == b is true

### 缺陷报告

下列更改行为的缺陷报告追溯地应用于以前出版的 C++ 标准。

DR | 应用于 | 出版时的行为 | 正确行为
--- | --- | --- | ---
LWG 3074 | C++98 | (2-3) 从标量和 `valarray` 两者推导 `T` ，禁止混合类型的调用 | 仅从 `valarray` 推导 `T`