operator==,!=,<,<=,>,>=(std::valarray)
定義於標頭檔案 <valarray> |
||
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, |
(2) | |
template< class T > std::valarray<bool> operator==( const std::valarray<T>& lhs, |
(3) | |
將數值陣列中的每個值與另一個值進行比較。
如果 size() != v.size(),則行為未定義。
目錄 |
[編輯] 引數
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<T>& 的函式(除了 begin() 和 end())(C++11 起),應新增接受替換型別的相同函式;
- 對於每個接受兩個 const std::valarray<T>& 引數的函式,應新增接受 const std::valarray<T>& 和替換型別所有組合的相同函式。
- 返回型別不會在最深層巢狀的引數型別之上增加超過兩個模板巢狀級別。
[編輯] 示例
#include <iostream> #include <valarray> int main() { // zero all negatives in a 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'; // convert the valarray<bool> result of == to a single 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++ 標準。
缺陷報告 | 應用於 | 釋出時的行為 | 正確的行為 |
---|---|---|---|
LWG 3074 | C++98 | 對於 (2,3),T 是從標量和 valarray 推匯出來的,不允許混合型別呼叫 |
僅從 valarray 推導 T |