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(),则行为未定义。
内容 |
[edit] 参数
lhs, rhs | - | 要比较的数值数组 |
lhsv, rhsv | - | 要与数值数组中的每个元素比较的值 |
[edit] 返回值
一个包含对应元素的比较结果的 bool 类型的数值数组。
[edit] 异常
可能会抛出实现定义的异常。
[edit] 注意事项
每个运算符只有在满足以下要求时才能实例化。
- 指示的运算符可以应用于类型
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>& 和替换类型的每种组合的相同函数。
- 返回类型不会比最深嵌套的参数类型增加超过两层的模板嵌套。
[edit] 示例
#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
[edit] 缺陷报告
以下行为改变的缺陷报告被追溯地应用于之前发布的 C++ 标准。
DR | 应用于 | 发布的行为 | 正确行为 |
---|---|---|---|
LWG 3074 | C++98 | T 从标量和 valarray 中推断出来,用于 (2,3),不允许混合类型调用 |
只从 valarray 中推断 T |