Класс slice

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

Remarks

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

  • Начальный индекс в элементе valarray.

  • Общая длина или количество элементов в элементе slice.

  • Шаг или расстояние между индексами элементов в элементе valarray.

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

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

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

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

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

Функция-член Описание
size Находит количество элементов в элементе slice a valarray.
start Находит начальный индекс элемента slice a valarray.
stride Находит расстояние между элементами в элементе slice a valarray.

Требования

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

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

slice::size

Находит количество элементов в элементе slice a valarray.

size_t size() const;

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

Число элементов в элементе slice a valarray.

Пример

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

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

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

   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;

   slice vaSlice ( 3 , 6 , 3 );
   vaResult = va [ vaSlice ];

   cout << "The slice of valarray va is vaResult = "
        << "va[slice( 3, 6, 3)] =\n ( ";
      for ( i = 0 ; i < 6 ; i++ )
         cout << vaResult [ i ] << " ";
   cout << ")." << endl;

   sizeVAR = vaSlice.size ( );
   cout << "The size of slice vaSlice is: "
        << sizeVAR << "." << endl;
}
The operand valarray va is:
( 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 ).
The size of the valarray is: 20.

The slice of valarray va is vaResult = va[slice( 3, 6, 3)] =
( 4 7 10 13 16 19 ).
The size of slice vaSlice is: 6.

slice::slice

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

slice();

slice(
    size_t _StartIndex,
    size_t _Len,
    size_t stride);

Параметры

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

_Len
Количество элементов в подмножестве.

stride
Расстояние между элементами в подмножестве.

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

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

Remarks

Значение stride может быть отрицательным.

Пример

// slice_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 ] =  2 * (i + 1 );

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

   slice vaSlice ( 1 , 7 , 3 );
   vaResult = va [ vaSlice ];

   cout << "\nThe slice of valarray va is vaResult:"
        << "\nva[slice( 1, 7, 3)] = ( ";
      for ( i = 0 ; i < 7 ; i++ )
         cout << vaResult [ i ] << " ";
   cout << ")." << endl;
}
The operand valarray va is:
( 2 4 6 8 10 12 14 16 18 20 22 24 26 28 30 32 34 36 38 40 ).

The slice of valarray va is vaResult:
va[slice( 1, 7, 3)] = ( 4 10 16 22 28 34 40 ).

slice::start

Находит начальный индекс элемента slice a valarray.

size_t start() const;

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

Начальный индекс элемента a slicevalarray.

Пример

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

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

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

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

   slice vaSlice ( 3 , 6 , 3 );
   vaResult = va [ vaSlice ];

   cout << "The slice of valarray va is vaResult = "
        << "va[slice( 3, 6, 3)] =\n ( ";
      for ( i = 0 ; i < 6 ; i++ )
         cout << vaResult [ i ] << " ";
   cout << ")." << endl;

   startVAR = vaSlice.start ( );
   cout << "The start index of slice vaSlice is: "
        << startVAR << "." << endl;
}
The operand valarray va is:
( 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 ).
The slice of valarray va is vaResult = va[slice( 3, 6, 3)] =
( 4 7 10 13 16 19 ).
The start index of slice vaSlice is: 3.

slice::stride

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

size_t stride() const;

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

Расстояние между элементами в элементе slice a valarray.

Пример

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

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

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

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

   slice vaSlice ( 4 , 5 , 3 );
   vaResult = va [ vaSlice ];

   cout << "The slice of valarray va is vaResult = "
        << "va[slice( 4, 5, 3)] =\n ( ";
      for ( i = 0 ; i < 5 ; i++ )
         cout << vaResult [ i ] << " ";
   cout << ")." << endl;

   strideVAR = vaSlice.stride ( );
   cout << "The stride of slice vaSlice is: "
        << strideVAR << "." << endl;
}
The operand valarray va is:
( 3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 ).
The slice of valarray va is vaResult = va[slice( 4, 5, 3)] =
( 15 24 33 42 51 ).
The stride of slice vaSlice is: 3.

См. также раздел

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