以下代码无法编译:

#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;
}

的两个声明都不会编译。是否允许以上面演示的方式使用valarray或在使用方式上有限制。

最佳答案

我相信我有solution,尽管我可能错了。

因为beginendnon-member overloads,所以您使用begin(a)而不是a.begin()等。

我选择使用std::transform的选择是,您要遍历ab,比较它们,并将结果存储在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);
   });

关于c++ - 多维标准::valarray and inequalities,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20278483/

10-11 19:32