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++ 标准。
DR | 应用于 | 已发布行为 | 正确行为 |
---|---|---|---|
LWG 3074 | C++98 | 对于 (2,3),T 是从标量和 valarray 推导出来的, 不允许混合类型调用 |
仅从 valarray 推导 T |