namespace std { class gslice { public: gslice(); gslice(size_t s, const valarray<size_t>& l, const valarray<size_t>& d); size_t start() const; valarray<size_t> size() const; valarray<size_t> stride() const; }; }
Этот класс представляет собой обобщенный фрагмент массива. A gslice определяется начальным смещением (s), набором длин (lj) и набором шагов (dj). Количество длин должно быть равно количеству шагов.
A gslice представляет собой отображение набора индексов (ij), количество которых равно количеству шагов, в один индексk. Это полезно для построения классов многомерных массивов с использованием valarray одномерного шаблона. Набор значений одномерных индексов, заданных agslice :
k=s+∑jijdj
где многомерные индексыij имеют значения от 0 доlij−1.
[ Спецификация Example: gslice
start = 3 length = {2, 4, 3} stride = {19, 4, 1}
дает последовательность одномерных индексов
k=3+(0,1)×19+(0,1,2,3)×4+(0,1,2)×1
которые упорядочены, как показано в следующей таблице:
(i0,i1,i2,k)= (0,0,0, 3), (0,0,1, 4), (0,0,2, 5), (0,1,0, 7), (0,1,1, 8), (0,1,2, 9), (0,2,0,11), (0,2,1,12), (0,2,2,13), (0,3,0,15), (0,3,1,16), (0,3,2,17), (1,0,0,22), (1,0,1,23), … (1,3,2,36)
То есть индекс с самым высоким порядком получается быстрее всего. ] — end example
[ Example: Если параметры шага в предыдущем примере изменить на {1, 1, 1}, первые несколько элементов результирующей последовательности индексов будут
(0,0,0, 3), (0,0,1, 4), (0,0,2, 5), (0,1,0, 4), (0,1,1, 5), (0,1,2, 6), …
— end example ]