operator==,!=,<,<=,>,>=(std::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) | |
数値配列内のそれぞれの値を別の値と比較します。
lhs
と rhs
のそれぞれの値に指定された比較演算子を適用することによって取得されたそれぞれの要素を対応する位置に格納する bool の数値配列を返します。lhsv
と rhs
のそれぞれの値に指定された比較演算子を適用することによって取得されたそれぞれの要素を対応する位置に格納する bool の数値配列を返します。lhs
のそれぞれの値と rhsv
に指定された比較演算子を適用することによって取得されたそれぞれの要素を対応する位置に格納する bool の数値配列を返します。目次 |
[編集]引数
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 が構築できます。
- conststd::valarray& 型の引数を取るすべての関数 ( begin() と end() を除く)(C++11以上) は置換型も受理するべきです。
- conststd::valarray& 型の引数を2つ取るすべての関数は conststd::valarray& と置換型のすべての組み合わせを受理するべきです。
- 戻り値の型は最も深くネストした引数型より3段以上ネストしたテンプレートを追加しません。
[編集] 欠陥報告
以下の動作変更欠陥報告は以前に発行された C++ 標準に遡って適用されました。
DR | 適用先 | 発行時の動作 | 正しい動作 |
---|---|---|---|
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 |
[編集]例
#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'; }
出力:
Before: 1 -1 0 -3 10 -1 -2 After: 1 0 0 0 10 0 0 2*a == b is true