1

以下代码无法编译:

#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 或者对如何使用它有限制。

4

1 回答 1

1

我相信我有解决方案,尽管我可能是错的。

因为beginandend是非成员重载,所以你使用begin(a)而不是a.begin()等等。

我在使用时的选择std::transform是您要遍历aand b,比较它们,并将结果存储在 中c,这就是 lambda 返回 a std::valarray<bool>(而不是 a 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);
   });
于 2013-11-29T05:02:42.197 回答