<valarray>

std::gslice

class gslice;
Valarray 广义切片选择器
此类表示一个 valarray广义切片选择器(多维切片)。它不包含或引用任何元素 - 它仅描述要用作 valarray::operator[] 中索引的元素选择。

Valarray 广义切片起始索引大小集步幅集指定。它产生 slice 选择器的多维组合,其中

起始索引start)是选择中的第一个元素的索引。
大小size)是选择中的元素数量。
步幅stride)是分隔所选元素的间隔。

例如,一个 gslice 具有
start = 1
size = {2, 3}
stride = {7, 2}

将选择


                    [0][1][2][3][4][5][6][7][8][9][10][11][12][13]
start=1:                *
                        |
size=2, stride=7:       *--------------------*
                        |                    |
size=3, stride=2:       *-----*-----*        *------*------*
                        |     |     |        |      |      |
gslice:                 *     *     *        *      *      *
                    [0][1][2][3][4][5][6][7][8][9][10][11][12][13]


成员函数


示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
// gslice example
#include <iostream>     // std::cout
#include <cstddef>      // std::size_t
#include <valarray>     // std::valarray, std::gslice

int main ()
{
  std::valarray<int> foo (14);
  for (int i=0; i<14; ++i) foo[i]=i;

  std::size_t start=1;
  std::size_t lengths[]= {2,3};
  std::size_t strides[]= {7,2};

  std::gslice mygslice (start,
                        std::valarray<std::size_t>(lengths,2),
                        std::valarray<std::size_t>(strides,2));

  std::valarray<int> bar = foo[mygslice];

  std::cout << "gslice:";
  for (std::size_t n=0; n<bar.size(); n++)
	  std::cout << ' ' << bar[n];
  std::cout << '\n';

  return 0;
}

输出

gslice: 1 3 5 8 10 12


另见