Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Класс
Класс служебной 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 ).