template<class T>
std::valarray<T> operator+(conststd::valarray<T>& lhs, conststd::valarray<T>& rhs); template<class T> std::valarray<T> operator-(conststd::valarray<T>& lhs, conststd::valarray<T>& rhs); template<class T> std::valarray<T> operator*(conststd::valarray<T>& lhs, conststd::valarray<T>& rhs); template<class T> std::valarray<T> operator/(conststd::valarray<T>& lhs, conststd::valarray<T>& rhs); template<class T> std::valarray<T> operator%(conststd::valarray<T>& lhs, conststd::valarray<T>& rhs); template<class T> std::valarray<T> operator&(conststd::valarray<T>& lhs, conststd::valarray<T>& rhs); template<class T> std::valarray<T> operator|(conststd::valarray<T>& lhs, conststd::valarray<T>& rhs); template<class T> std::valarray<T> operator^(conststd::valarray<T>& lhs, conststd::valarray<T>& rhs); template<class T> std::valarray<T> operator<<(conststd::valarray<T>& lhs, conststd::valarray<T>& rhs); template<class T> std::valarray<T> operator>>(conststd::valarray<T>& lhs, conststd::valarray<T>& rhs); template<class T> std::valarray<bool> operator&&(conststd::valarray<T>& lhs, conststd::valarray<T>& rhs); template<class T>
std::valarray<bool> operator||(conststd::valarray<T>& lhs, conststd::valarray<T>& rhs); | (1) | |
template<class T>
std::valarray<T> operator+(consttypenamestd::valarray<T>::value_type& val, conststd::valarray<T>& rhs); template<class T> std::valarray<T> operator-(consttypenamestd::valarray<T>::value_type& val, conststd::valarray<T>& rhs); template<class T> std::valarray<T> operator*(consttypenamestd::valarray<T>::value_type& val, conststd::valarray<T>& rhs); template<class T> std::valarray<T> operator/(consttypenamestd::valarray<T>::value_type& val, conststd::valarray<T>& rhs); template<class T> std::valarray<T> operator%(consttypenamestd::valarray<T>::value_type& val, conststd::valarray<T>& rhs); template<class T> std::valarray<T> operator&(consttypenamestd::valarray<T>::value_type& val, conststd::valarray<T>& rhs); template<class T> std::valarray<T> operator|(consttypenamestd::valarray<T>::value_type& val, conststd::valarray<T>& rhs); template<class T> std::valarray<T> operator^(consttypenamestd::valarray<T>::value_type& val, conststd::valarray<T>& rhs); template<class T> std::valarray<T> operator<<(consttypenamestd::valarray<T>::value_type& val, conststd::valarray<T>& rhs); template<class T> std::valarray<T> operator>>(consttypenamestd::valarray<T>::value_type& val, conststd::valarray<T>& rhs); template<class T> std::valarray<bool> operator&&(consttypenamestd::valarray<T>::value_type& val, conststd::valarray<T>& rhs); template<class T> std::valarray<bool> operator||(consttypenamestd::valarray<T>::value_type& val,
conststd::valarray<T>& rhs); | (2) | |
template<class T>
std::valarray<T> operator+(conststd::valarray<T>& lhs, consttypenamestd::valarray<T>::value_type& val); template<class T> std::valarray<T> operator-(conststd::valarray<T>& lhs, consttypenamestd::valarray<T>::value_type& val); template<class T> std::valarray<T> operator*(conststd::valarray<T>& lhs, consttypenamestd::valarray<T>::value_type& val); template<class T> std::valarray<T> operator/(conststd::valarray<T>& lhs, consttypenamestd::valarray<T>::value_type& val); template<class T> std::valarray<T> operator%(conststd::valarray<T>& lhs, consttypenamestd::valarray<T>::value_type& val); template<class T> std::valarray<T> operator&(conststd::valarray<T>& lhs, consttypenamestd::valarray<T>::value_type& val); template<class T> std::valarray<T> operator|(conststd::valarray<T>& lhs, consttypenamestd::valarray<T>::value_type& val); template<class T> std::valarray<T> operator^(conststd::valarray<T>& lhs, consttypenamestd::valarray<T>::value_type& val); template<class T> std::valarray<T> operator<<(conststd::valarray<T>& lhs, consttypenamestd::valarray<T>::value_type& val); template<class T> std::valarray<T> operator>>(conststd::valarray<T>& lhs, consttypenamestd::valarray<T>::value_type& val); template<class T> std::valarray<bool> operator&&(conststd::valarray<T>& lhs, consttypenamestd::valarray<T>::value_type& val); template<class T> std::valarray<bool> operator||(conststd::valarray<T>& lhs,
consttypenamestd::valarray<T>::value_type& val); | (3) | |
| | |
2つの valarray の各要素に、または1つの valarray の各要素と1つの値に、二項演算子を適用します。
1) 演算子は同じサイズの valarray に対して動作し、2つの引数のすべての要素に演算が適用された引数と同じサイズの valarray を返します。
2,3) valarray の各要素とスカラーの間に演算子を適用します。
rhs | - | 数値配列 |
lhs | - | 数値配列 |
val | - | T 型の値 |
[編集]戻り値
引数と同じサイズの valarray。
[編集]ノート
2つの引数が異なるサイズの valarray であるとき、動作は未定義です。
関数は std::valarray と異なる戻り値の型を使用して実装することができます。 この場合、その置換型は以下の性質を持ちます。
[編集] 欠陥報告
以下の動作変更欠陥報告は以前に発行された 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 |
Finds real roots of multiple quadratic equations.
#include <valarray>#include <iostream> int main(){std::valarray<double> a(1, 8);std::valarray<double> b{1, 2, 3, 4, 5, 6, 7, 8};std::valarray<double> c =-b;// literals must also be of type T (double in this case)std::valarray<double> d =std::sqrt((b * b -4.0* a * c));std::valarray<double> x1 =(-b - d)/(2.0* a);std::valarray<double> x2 =(-b + d)/(2.0* a);std::cout<<"quadratic equation root 1, root 2"<<"\n";for(size_t i =0; i < a.size();++i){std::cout<< a[i]<<"x\u00B2 + "<< b[i]<<"x + "<< c[i]<<" = 0 ";std::cout<< x1[i]<<", "<< x2[i]<<"\n";}}
出力:
quadratic equation root 1, root 2 1x² + 1x + -1 = 0 -1.61803, 0.618034 1x² + 2x + -2 = 0 -2.73205, 0.732051 1x² + 3x + -3 = 0 -3.79129, 0.791288 1x² + 4x + -4 = 0 -4.82843, 0.828427 1x² + 5x + -5 = 0 -5.8541, 0.854102 1x² + 6x + -6 = 0 -6.87298, 0.872983 1x² + 7x + -7 = 0 -7.88748, 0.887482 1x² + 8x + -8 = 0 -8.89898, 0.898979