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

出自cppreference.com


 
 
 
 
在標頭 <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 的數值數組,含應用指示的比較運算符到 lhsrhs 的對應元素所獲得的每個元素。

size() != v.size() 則行為未定義。

2) 返回 bool 的數值數組,含應用指示的比較運算符到 lhsvrhs 的對應值所獲得的每個元素。
3) 返回 bool 的數值數組,含應用指示的比較運算符到 lhs 的對應值與 rhsv 所獲得的每個元素。

參數

lhs, rhs - 要比較的數值數組
lhsv, rhsv - 要與數值數組中每個元素比較的值

返回值

含對應元素比較結果的 bool 的數值數組。

異常

可能會拋出由實現定義的異常。

註解

僅若滿足下列要求,每個運算符才能實例化:

  • 指示的運算符能應用於類型 T
  • 返回值能無歧義地轉換為 bool

函數可以實現為擁有不同於 std::valarray 的返回類型。此時替換它的類型擁有下列屬性:

  • 提供 std::valarray 的所有 const 成員函數。
  • 能從替換類型構造 std::valarraystd::slice_arraystd::gslice_arraystd::mask_arraystd::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 << "之前: ";
    for(auto n: v) {
        std::cout << n << ' ';
    }
    std::cout << '\n';
    v[v < 0] = 0;
    std::cout << "之后: ";
    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 为 " << std::boolalpha
              << (2*a == b).min() << '\n';

}

輸出:

之前: 1 -1 0 -3 10 -1 -2
之后: 1 0 0 0 10 0 0
2*a == b 为 true

缺陷報告

下列更改行為的缺陷報告追溯地應用於以前出版的 C++ 標準。

缺陷報告 應用於 出版時的行為 正確行為
LWG 3074 C++98 (2-3) 從標量和 valarray 兩者推導 T,禁止混合類型的調用 僅從 valarray 推導 T