Класс gslice

Класс служебной valarray программы, используемый для определения многомерных подмножеств valarray. Если матрица valarray с несколькими элементами массива считается многомерной, извлекает gslice вектор из многомерного массива.

Замечания

Класс сохраняет параметры, характеризующие объект типа gslice_array. Подмножество valarray объекта создается косвенно, когда объект класса gslice отображается в качестве аргумента для объекта класса valarray<Type>. Сохраненные значения, указывающие подмножество, выбранное из родительского valarray элемента, включают:

  • Начальный индекс.

  • Вектор длины класса valarray<size_t>.

  • Шаг вектор класса valarray<size_t>.

Длина обоих векторов должна быть одинаковой.

Если заданный набором gslice является подмножество константы valarray, то gslice он является новым valarray. Если набор, определенный набором gslice , является подмножеством неконстантного valarray, то gslice имеет семантику ссылки на исходный valarray. Механизм оценки для неконстантных valarray объектов экономит время и память.

Операции с valarray объектами гарантируются только в том случае, если исходные и конечные подмножества, определенные gslice объектами, отличаются и все индексы допустимы.

Конструкторы

Конструктор Description
gslice Определяет подмножество valarray, состоящее из нескольких фрагментов valarray, начинающихся с указанного элемента.

Функции элементов

Функция-член Description
size Находит значения массива, указывающие количество элементов в общем срезе valarray.
start Находит индекс начала общего среза valarray.
stride Находит расстояние между элементами в общем срезе valarray.

Требования

Заголовок:<valarray>

Пространство имен: std

gslice::gslice

Класс служебной valarray программы, используемый для определения многомерных срезов valarray.

gslice();

gslice(
    size_t _StartIndex,
    const valarray<size_t>& _LenArray,
    const valarray<size_t>& _IncArray);

Параметры

_StartIndex
valarray Индекс первого элемента в подмножестве.

_LenArray
Указание valarray количества элементов в каждом gsliceэлементе.

_IncArray
Указание valarray шага в каждом gsliceиз них.

Возвращаемое значение

Конструктор по умолчанию хранит нуль для начального индекса и векторы нулевой длины для векторов длины и шага. Второй конструктор хранит _StartIndex для начального индекса, _LenArray для массива длины и _IncArray для массива шагов.

Замечания

gslice определяет подмножество, valarray состоящее из нескольких срезов valarray каждого из которых начинается с одного и того же указанного элемента. Возможность использовать массивы для определения нескольких срезов является единственной разницей между gslice и slice::slice. Первый срез содержит первый элемент с индексом_StartIndex, число элементов, указанных первым элементом, и шаг, заданный первым элементом_LenArray_IncArray. Следующий набор ортогональных срезов имеет первые элементы, задаваемые первом срезом. Второй элемент _LenArray указывает число элементов. Шаг задается вторым элементом _IncArray. Третье измерение срезов принимает элементы двухмерного массива в качестве начальных элементов и продолжается аналогично.

Пример

// gslice_ctor.cpp
// compile with: /EHsc
#include <valarray>
#include <iostream>

int main( )
{
   using namespace std;
   int i;

   valarray<int> va ( 20 ), vaResult;
   for ( i = 0 ; i < 20 ; i+=1 )
      va [ i ] =  i;

   cout << "The operand valarray va is:" << endl << "(";
   for ( i = 0 ; i < 20 ; i++ )
      cout << " " << va [ i ];
   cout << " )" << endl;

   valarray<size_t> Len ( 2 ), Stride ( 2 );
   Len [0] = 4;
   Len [1] = 4;
   Stride [0] = 7;
   Stride [1] = 4;

   gslice vaGSlice ( 0, Len, Stride );
   vaResult = va [ vaGSlice ];

   cout << "The valarray for vaGSlice is vaResult:" << endl
        << "va[vaGSlice] = (";

   for ( i = 0 ; i < 8 ; i++ )
      cout << " " << vaResult [ i ];
   cout << ")" << endl;
}
The operand valarray va is:
( 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 )
The valarray for vaGSlice is vaResult:
va[vaGSlice] = ( 0 4 8 12 7 11 15 19)

gslice::size

Находит значения массива, указывающие количество элементов в общем срезе valarray.

valarray<size_t> size() const;

Возвращаемое значение

Указание valarray количества элементов в каждом срезе общего среза valarray.

Замечания

Функция-член возвращает сохраненные длины срезов.

Пример

// gslice_size.cpp
// compile with: /EHsc
#include <valarray>
#include <iostream>

int main( )
{
   using namespace std;
   int i;
   size_t sizeVA;

   valarray<int> va ( 20 ), vaResult;
   for ( i = 0 ; i < 20 ; i+=1 )
      va [ i ] =  i;

   cout << "The operand valarray va is:\n ( ";
      for ( i = 0 ; i < 20 ; i++ )
         cout << va [ i ] << " ";
   cout << ")." << endl;

   sizeVA = va.size ( );
   cout << "The size of the valarray is: "
        << sizeVA << "." << endl << endl;

   valarray<size_t> Len ( 2 ), Stride ( 2 );
   Len [0] = 4;
   Len [1] = 4;
   Stride [0] = 7;
   Stride [1] = 4;

   gslice vaGSlice ( 0, Len, Stride );
   vaResult = va [ vaGSlice ];
   const valarray <size_t> sizeGS = vaGSlice.size ( );

   cout << "The valarray for vaGSlice is vaResult:"
        << "\n va[vaGSlice] = ( ";
      for ( i = 0 ; i < 8 ; i++ )
         cout << vaResult [ i ] << " ";
   cout << ")." << endl;

   cout << "The size of vaResult is:"
        << "\n vaGSlice.size ( ) = ( ";
      for ( i = 0 ; i < 2 ; i++ )
         cout << sizeGS[ i ] << " ";
   cout << ")." << endl;
}
The operand valarray va is:
( 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 ).
The size of the valarray is: 20.

The valarray for vaGSlice is vaResult:
va[vaGSlice] = ( 0 4 8 12 7 11 15 19 ).
The size of vaResult is:
vaGSlice.size ( ) = ( 4 4 ).

gslice::start

Находит индекс начала общего среза valarray.

size_t start() const;

Возвращаемое значение

Начальный индекс общего среза valarray.

Пример

// gslice_start.cpp
// compile with: /EHsc
#include <valarray>
#include <iostream>

int main( )
{
   using namespace std;
   int i;

   valarray<int> va ( 20 ), vaResult;
   for (i = 0 ; i < 20 ; i+=1 )
      va [ i ] =  i;

   cout << "The operand valarray va is:\n ( ";
      for ( i = 0 ; i < 20 ; i++ )
         cout << va [ i ] << " ";
   cout << ")." << endl;

   valarray<size_t> Len ( 2 ), Stride ( 2 );
   Len [0] = 4;
   Len [1] = 4;
   Stride [0] = 7;
   Stride [1] = 4;

   gslice vaGSlice ( 0, Len, Stride );
   vaResult = va [ vaGSlice ];
   size_t vaGSstart = vaGSlice.start ( );

   cout << "The valarray for vaGSlice is vaResult:"
        << "\n va[vaGSlice] = ( ";
      for (i = 0 ; i < 8 ; i++ )
         cout << vaResult [ i ] << " ";
   cout << ")." << endl;

   cout << "The index of the first element of vaResult is: "
        << vaGSstart << "." << endl;
}
The operand valarray va is:
( 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 ).
The valarray for vaGSlice is vaResult:
va[vaGSlice] = ( 0 4 8 12 7 11 15 19 ).
The index of the first element of vaResult is: 0.

gslice::stride

Находит расстояние между элементами в общем срезе valarray.

valarray<size_t> stride() const;

Возвращаемое значение

Указание valarray расстояний между элементами в каждом срезе общего среза valarray.

Пример

// gslice_stride.cpp
// compile with: /EHsc
#include <valarray>
#include <iostream>

int main( )
{
   using namespace std;
   int i;

   valarray<int> va ( 20 ), vaResult;
   for (i = 0 ; i < 20 ; i+=1 )
      va [ i ] =  i;

   cout << "The operand valarray va is:\n ( ";
      for (i = 0 ; i < 20 ; i++ )
         cout << va [ i ] << " ";
   cout << ")." << endl;

   valarray<size_t> Len ( 2 ), Stride ( 2 );
   Len [0] = 4;
   Len [1] = 4;
   Stride [0] = 7;
   Stride [1] = 4;

   gslice vaGSlice ( 0, Len, Stride );
   vaResult = va [ vaGSlice ];
   const valarray <size_t> strideGS = vaGSlice.stride ( );

   cout << "The valarray for vaGSlice is vaResult:"
        << "\n va[vaGSlice] = ( ";
      for ( i = 0 ; i < 8 ; i++ )
         cout << vaResult [ i ] << " ";
   cout << ")." << endl;

   cout << "The strides of vaResult are:"
        << "\n vaGSlice.stride ( ) = ( ";
      for ( i = 0 ; i < 2 ; i++ )
         cout << strideGS[ i ] << " ";
   cout << ")." << endl;

}
The operand valarray va is:
( 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 ).
The valarray for vaGSlice is vaResult:
va[vaGSlice] = ( 0 4 8 12 7 11 15 19 ).
The strides of vaResult are:
vaGSlice.stride ( ) = ( 7 4 ).

См. также

Безопасность потоков в стандартной библиотеке C++