对std :: valarray切片感到困惑(slice_array,gslice_array,mask_array和indirect_array)

qua*_*ant 5 c++ numeric

我想获得一个std::valarray范围,该范围引用另一个valarray对象的值范围,而不制作值的副本。文档有关的指标规定[]操作,我需要使用std::slice std::gslice或布尔std::valarray对象作为参数来实现这一点,在这种情况下,我会得到一个slice_arraygslice_arraymask_array为回报:

   slice_array<T> operator[] (slice slc);
  gslice_array<T> operator[] (const gslice& gslc);   
    mask_array<T> operator[] (const valarray<bool>& msk);
indirect_array<T> operator[] (const valarray<size_t>& ind);
Run Code Online (Sandbox Code Playgroud)

当我查看这些返回类型的描述时,它们都是一样的!查看以下描述:slice_arraygslice_arraymask_arrayindirect_array

那么我应该在哪种情况下使用呢?我理解这一点,mask_array并且indirect_array似乎更倾向于专门从某个范围中选择值,但是slice_array/ gslice_array呢?

就我而言,我正在考虑使用slice_array它,因为这听起来很像我在做什么(我正在切片,对吧?)。但我更喜欢一些具体的东西!