如何比较 C++ slice_array?为啥不能将其与 valarray 进行比较?

Posted

技术标签:

【中文标题】如何比较 C++ slice_array?为啥不能将其与 valarray 进行比较?【英文标题】:How to compare C++ slice_array? Why it cannot be compared as valarray?如何比较 C++ slice_array?为什么不能将其与 valarray 进行比较? 【发布时间】:2015-10-18 08:24:48 【问题描述】:

我想知道为什么我不能比较 some_valarray[first_slice] < another_valarray[second_slice] 而我比较 some_valarray < another_valarray 以及如何在不复制的情况下以简单的方式做到这一点?当然,我可以在普通循环中对它们进行迭代,但也许还有更优雅、更可能优化的方式?

【问题讨论】:

据我所知,valarray 已被弃用。 @Lingxi 你能提供一些证据吗?试图用谷歌搜索它,但没有找到任何有意义的东西。 看来我错了。 ***.com/questions/2576688/… @Lingxi 是的,我也读过。 【参考方案1】:

要比较slice_array,您目前必须使用valarray( const std::slice_array& )。

#include <valarray>

int main() 
  //Initialize valarray
  std::valarray<int> val00,1,2,3,4,5,6,7,8,9;
  std::valarray<int> val19,8,7,6,5,4,3,2,1,0;

  //Compare valarray
  std::valarray<bool> cmp0 = val0 < val1;

  //Compare slice_array
  std::valarray<bool> cmp1 = 
std::valarray<int>(val0[std::slice(0,5,2)]) < std::valarray<int>(val1[std::slice(1,5,2)]);

  //Compare slice_array since c++17
  std::valarray<bool> cmp2 =
std::valarray(val0[std::slice(0,5,2)]) < std::valarray(val1[std::slice(1,5,2)]);

  return 0;

【讨论】:

以上是关于如何比较 C++ slice_array?为啥不能将其与 valarray 进行比较?的主要内容,如果未能解决你的问题,请参考以下文章

为啥不能比较两个 int 类型变量的值? [复制]

返回对 slice_array 的引用

为啥 c++ ifstream 不能从设备读取?

为啥“基类对象”不能调用它自己的虚函数? C++

为啥我可以在 Mac OS X 上使用 Cython 编译为 C 但不能编译为 C++

C++:为啥输出迭代器不支持比较操作?