以下代码无法编译:
#include <valarray>
int main()
{
std::valarray<std::valarray<int>> a;
std::valarray<std::valarray<int>> b;
//std::valarray<std::valarray<bool>> c;
std::valarray<bool> c;
c = (a == b);
return 0;
}
c 的声明都没有编译。是否允许以上述方式使用valarray,或者是否应该如何使用valarray。
答案 0 :(得分:1)
我相信我有solution,但我可能错了。
由于begin
和end
为non-member overloads,因此您使用begin(a)
代替a.begin()
,依此类推。
我选择使用std::transform
是您要迭代a
和b
,比较它们,并将结果存储在c
中,这就是lambda的原因返回std::valarray<bool>
(而不是bool
)。
std::valarray<std::valarray<int>> a;
std::valarray<std::valarray<int>> b;
std::valarray<std::valarray<bool>> c;
std::transform(begin(a), end(a), begin(b), begin(c),
[&] (std::valarray<int> a_val, std::valarray<int> b_val)
-> std::valarray<bool> {
return std::valarray<bool>(a_val == b_val);
});