Класс valarray

Шаблон valarray<Type> класса описывает объект, который управляет последовательностью элементов типа Type , хранящихся в виде массива, предназначенных для высокоскоростных математических операций и оптимизированных для вычислительной производительности.

Замечания

Класс представляет собой представление математической концепции упорядоченного набора значений. Его элементы нумеруются последовательно от нуля. Класс описывается как близкий контейнер , так как он поддерживает некоторые, но не все возможности, которые контейнеры последовательности первого класса, такие как vectorподдержка. Он отличается от шаблона vector класса двумя важными способами:

  • Он определяет множество арифметических операций между соответствующими элементами valarray<Type> объектов одного типа и длины, например varr_x* = cos(varr_y) + sin(varr_z).

  • Он определяет различные интересные способы подстроки valarray<Type> объекта путем перегрузки operator[].

Объект класса Type:

  • Имеет открытый конструктор по умолчанию, деструктор, конструктор копии и оператор присваивания, работающие обычным образом.

  • При необходимости определяет арифметические операторы и математические функции, определенные для типов с плавающей запятой и работающие обычным образом.

В частности, между конструкцией копирования и конструкцией по умолчанию, за которыми следует присваивание, не может существовать даже малейших отличий. Ни одна из операций с объектами класса Type не может вызывать исключения.

Участники

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

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

Определения типов

Имя Описание
value_type Тип, представляющий тип элемента, хранящегося в valarray.

Функции

Имя Описание
apply Применяет заданную функцию для каждого элемента объекта valarray.
cshift Циклически смещает все элементы в valarray на заданное число позиций.
free Освобождает память, используемую valarray.
max Находит наибольший элемент в valarray.
min Находит наименьший элемент в valarray.
resize Изменяет количество элементов в valarray на заданное число, при необходимости добавляя или удаляя элементы.
shift Смещает все элементы в valarray на заданное число позиций.
size Находит количество элементов в valarray.
sum Определяет сумму всех элементов в valarray с ненулевой длиной.
swap

Операторы

Имя Описание
operator! Унарный оператор, получающий логические значения NOT (!) каждого элемента в объекте valarray.
operator%= Получает остаток от поэлементного деления элементов массива на указанный valarray или на значение типа элемента.
operator&= Получает побитовое И (&) элементов в массиве с соответствующими элементами в указанном valarray или со значением типа элемента.
operator>>= Сдвигает вправо биты для каждого элемента операнда valarray на указанное число позиций или на поэлементную сумму, указанную вторым valarray.
operator<<= Сдвигает влево биты для каждого элемента операнда valarray на указанное число позиций или на поэлементную сумму, указанную вторым valarray.
operator*= Поэлементно умножает элементы указанного valarray или значение типа элемента на операнд valarray.
operator+ Унарный оператор, который прибавляет единицу к каждому элементу в valarray. В обычных арифметических типах этот оператор не действует.
operator+= Поэлементно прибавляет элементы указанного valarray или значение типа элемента к операнду valarray.
operator- Унарный оператор, который применяет арифметическое отрицание к каждому элементу в объекте valarray.
operator-= Поэлементно вычитает элементы указанного valarray или значение типа элемента из операнда valarray.
operator/= Поэлементно делит операнд valarray на элементы указанного valarray или значение типа элемента.
operator= Назначает элементы для valarray, значения которых задаются либо непосредственно или как часть другого valarray, либо с помощью slice_array, gslice_array, mask_array или indirect_array.
operator[] Возвращает ссылку на элемент или его значение по указанному индексу или для определенного подмножества.
operator^= Получает побитовое монопольное или (^) valarray с заданным valarray или значением типа элемента.
operator|= Получает побитовое ИЛИ (|) элементов массива с соответствующими элементами в указанном valarray или со значением типа элемента.
operator~ Унарный оператор, который получает побитовое дополнение (~) значения каждого элемента в valarray.

apply

Применяет заданную функцию для каждого элемента объекта valarray.

valarray<Type> apply(Type function_object(Type)) const;

valarray<Type> apply(Type function_object(const Type&)) const;

Параметры

function_object(Type)
Объект функции, применяемый к каждому элементу операнда valarray.

function_object(const Type&)
Объект функции для const элементов, применяемых к каждому элементу операнда valarray.

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

Элемент valarray , элементы которого применялись function_object к элементам операнда valarray.

Замечания

Функция-член возвращает объект класса valarray<Type>, длина sizeкоторого, каждый из элементов elem которого является результатом function_object((*this)[elem]).

Пример

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

using namespace std;

int __cdecl MyApplyFunc( int n )
{
   return n*2;
}

int main( int argc, char* argv[] )
{
   valarray<int> vaR(10), vaApplied(10);
   int i;

   for ( i = 0; i < 10; i += 3 )
      vaR[i] = i;

   for ( i = 1; i < 10; i += 3 )
      vaR[i] = 0;

   for ( i = 2; i < 10; i += 3 )
      vaR[i] = -i;

   cout << "The initial Right valarray is: (";
   for   ( i=0; i < 10; ++i )
      cout << " " << vaR[i];
   cout << " )" << endl;

   vaApplied = vaR.apply( MyApplyFunc );

   cout << "The element-by-element result of "
       << "applying MyApplyFunc to vaR is the\nvalarray: ( ";
   for ( i = 0; i < 10; ++i )
      cout << " " << vaApplied[i];
   cout << " )" << endl;
}
The initial Right valarray is: ( 0 0 -2 3 0 -5 6 0 -8 9 )
The element-by-element result of applying MyApplyFunc to vaR is the
valarray: (  0 0 -4 6 0 -10 12 0 -16 18 )

cshift

Циклически смещает все элементы в valarray на заданное число позиций.

valarray<Type> cshift(int count) const;

Параметры

count
Количество позиций, на которые элементы будут сдвинуты вперед.

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

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

Замечания

При передаче положительного значения count элементы циклически смещаются влево на count позиций.

При передаче отрицательного значения count элементы циклически смещаются вправо на count позиций.

Пример

// valarray_cshift.cpp
// compile with: /EHsc

#include <valarray>
#include <iostream>

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

    valarray<int> va1(10), va2(10);
    for (i = 0; i < 10; i+=1)
        va1[i] = i;
    for (i = 0; i < 10; i+=1)
        va2[i] = 10 - i;

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

    // A positive parameter shifts elements right
    va1 = va1.cshift(4);
    cout << "The cyclically shifted valarray va1 is:\nva1.cshift (4) = (";
    for (i = 0; i < 10; i++)
        cout << " " << va1[i];
    cout << ")" << endl;

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

    // A negative parameter shifts elements left
    va2 = va2.cshift(-4);
    cout << "The cyclically shifted valarray va2 is:\nva2.shift (-4) = (";
    for (i = 0; i < 10; i++)
        cout << " " << va2[i];
    cout << ")" << endl;
}
The operand valarray va1 is: ( 0 1 2 3 4 5 6 7 8 9)
The cyclically shifted valarray va1 is:
va1.cshift (4) = ( 4 5 6 7 8 9 0 1 2 3)
The operand valarray va2 is: ( 10 9 8 7 6 5 4 3 2 1)
The cyclically shifted valarray va2 is:
va2.shift (-4) = ( 4 3 2 1 10 9 8 7 6 5)

free

Освобождает память, используемую valarray.

void free();

Замечания

Эта нестандартная функция эквивалентна назначению пустой valarrayфункции. Например:

valarray<T> v;
v = valarray<T>();

// equivalent to v.free()

max

Находит наибольший элемент в valarray.

Type max() const;

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

Максимальное значение элементов в операнде valarray.

Замечания

Функция-член сравнивает значения путем применения оператора или оператора>< между парами элементов классаType, для которых необходимо предоставить для элемента Typeоператоры.

Пример

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

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

   valarray<int> vaR ( 10 );
   for ( i = 0 ; i < 10 ; i += 3 )
      vaR [ i ] =  i;
   for ( i = 1 ; i < 10 ; i += 3 )
      vaR [ i ] =  2*i - 1;
   for ( i = 2 ; i < 10 ; i += 3 )
      vaR [ i ] =  10 - i;

   cout << "The operand valarray is: ( ";
      for (i = 0 ; i < 10 ; i++ )
         cout << vaR [ i ] << " ";
   cout << ")." << endl;

   MaxValue = vaR.max (  );
   cout << "The largest element in the valarray is: "
        << MaxValue  << "." << endl;
}
The operand valarray is: ( 0 1 8 3 7 5 6 13 2 9 ).
The largest element in the valarray is: 13.

min

Находит наименьший элемент в valarray.

Type min() const;

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

Минимальное значение элементов в операнде valarray.

Замечания

Функция-член сравнивает значения путем применения оператора или оператора>< между парами элементов классаType, для которых необходимо предоставить для элемента Typeоператоры.

Пример

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

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

   valarray<int> vaR ( 10 );
   for ( i = 0 ; i < 10 ; i += 3 )
      vaR [ i ] =  -i;
   for ( i = 1 ; i < 10 ; i += 3 )
      vaR [ i ] =  2*i;
   for ( i = 2 ; i < 10 ; i += 3 )
      vaR [ i ] =  5 - i;

   cout << "The operand valarray is: ( ";
      for ( i = 0 ; i < 10 ; i++ )
         cout << vaR [ i ] << " ";
   cout << ")." << endl;

   MinValue = vaR.min ( );
   cout << "The smallest element in the valarray is: "
        << MinValue  << "." << endl;
}
/* Output:
The operand valarray is: ( 0 2 3 -3 8 0 -6 14 -3 -9 ).
The smallest element in the valarray is: -9.
*/

operator!

Унарный оператор, получающий логические значения NOT (!) каждого элемента в объекте valarray.

valarray<bool> operator!() const;

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

Логические valarray значения, которые являются логическим отрицанием значений элементов операнда valarray.

Замечания

Логическая операция NOT, обозначаемая !логическим отрицанием элементов, так как она преобразует все нулевые значения в true и все ненулевых значения в false. Возвращаемые valarray логические значения совпадают с размером операнда valarray.

Пример

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

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

   valarray<int> vaL ( 10 );
   valarray<bool> vaNOT ( 10 );
   for ( i = 0 ; i < 10 ; i += 2 )
      vaL [ i ] =  0;
   for ( i = 1 ; i < 10 ; i += 2 )
      vaL [ i ] =  i-1;

   cout << "The initial valarray is:  ( ";
      for (i = 0 ; i < 10 ; i++ )
         cout << vaL [ i ] << " ";
   cout << ")." << endl;

   vaNOT = !vaL;
   cout << "The element-by-element result of "
        << "the logical NOT operator! is the"
        << endl << "valarray: ( ";
      for ( i = 0 ; i < 10 ; i++ )
         cout << vaNOT [ i ] << " ";
   cout << ")." << endl;
}
The initial valarray is:  ( 0 0 0 2 0 4 0 6 0 8 ).
The element-by-element result of the logical NOT operator! is the
valarray: ( 1 1 1 0 1 0 1 0 1 0 ).

operator%=

Получает остаток от поэлементного деления элементов массива на указанный valarray или на значение типа элемента.

valarray<Type>& operator%=(const valarray<Type>& right);

valarray<Type>& operator%=(const Type& right);

Параметры

right
Или valarray значение типа элемента, идентичного типу операнда valarray , который состоит в делении, элементе, операнде valarray.

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

Элемент valarray , элементы которого являются остальными от деления операнда valarray по rightэлементу.

Пример

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

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

   valarray<int> vaL ( 6 ), vaR ( 6 );
   for ( i = 0 ; i < 6 ; i += 2 )
      vaL [ i ] =  53;
   for ( i = 1 ; i < 6 ; i += 2 )
      vaL [ i ] =  -67;
   for ( i = 0 ; i < 6 ; i++ )
      vaR [ i ] =  3*i+1;

   cout << "The initial valarray is: ( ";
      for ( i = 0 ; i < 6 ; i++ )
         cout << vaL [ i ] << " ";
   cout << ")." << endl;

   cout << "The initial  right valarray is: ( ";
      for ( i = 0 ; i < 6 ; i++ )
         cout << vaR [ i ] << " ";
   cout << ")." << endl;

   vaL %= vaR;
   cout << "The remainders from the element-by-element "
        << "division is the"
        << endl << "valarray: ( ";
      for ( i = 0 ; i < 6 ; i++ )
         cout << vaL [ i ] << " ";
   cout << ")." << endl;
}
The initial valarray is: ( 53 -67 53 -67 53 -67 ).
The initial  right valarray is: ( 1 4 7 10 13 16 ).
The remainders from the element-by-element division is the
valarray: ( 0 -3 4 -7 1 -3 ).

operator&=

Получает побитовое И (&) элементов в массиве с соответствующими элементами в указанном valarray или со значением типа элемента.

valarray<Type>& operator&=(const valarray<Type>& right);

valarray<Type>& operator&=(const Type& right);

Параметры

right
Или valarray значение типа элемента, идентичного типу операнда valarray , который должен быть объединен, побитовой и (&) с операндом valarray.

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

Элементvalarray, элементы которого являются битовой и (&) операнда valarrayright

Замечания

Побитовая операция может использоваться только для управления битами в целочисленных типах данных, таких как char и int. Он не работает над floatтипами данных, а doubleтакже boollong doublevoidс другими, более сложными типами данных.

Битовое И (&) применяется к типу данных на уровне отдельных битов. Если оба бита b1b2b1 & b2 равно 1; 0, если по крайней мере один бит равен 0.

Пример

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

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

   valarray<int> vaL ( 10 ), vaR ( 10 );
   for ( i = 0 ; i < 10 ; i += 2 )
      vaL [ i ] =  0;
   for ( i = 1 ; i < 10 ; i += 2 )
      vaL [ i ] =  i-1;
   for ( i = 0 ; i < 10 ; i++ )
      vaR [ i ] =  i;

   cout << "The initial valarray is:  ( ";
      for ( i = 0 ; i < 10 ; i++ )
         cout << vaL [ i ] << " ";
   cout << ")." << endl;

   cout << "The initial Right valarray is: ( ";
      for ( i = 0 ; i < 10 ; i++ )
         cout << vaR [ i ] << " ";
   cout << ")." << endl;

   vaL &= vaR;
   cout << "The element-by-element result of "
        << "the bitwise AND operator&= is the"
        << endl << "valarray: ( ";
      for ( i = 0 ; i < 10 ; i++ )
         cout << vaL [ i ] << " ";
   cout << ")." << endl;
}
The initial valarray is:  ( 0 0 0 2 0 4 0 6 0 8 ).
The initial Right valarray is: ( 0 1 2 3 4 5 6 7 8 9 ).
The element-by-element result of the bitwise AND operator&= is the
valarray: ( 0 0 0 2 0 4 0 6 0 8 ).

operator>>=

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

valarray<Type>& operator>>=(const valarray<Type>& right);

valarray<Type>& operator>>=(const Type& right);

Параметры

right
Значение, указывающее количество сдвигов вправо или valarray элемент, элементы которого указывают на количество элементов вправо.

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

Элемент valarray , элементы которого были смещены вправо, указанное в right.

Замечания

Для чисел со знаком их знак сохраняется.

Пример

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

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

   valarray<int> vaL ( 8 ), vaR ( 8 );
   for ( i = 0 ; i < 8 ; i += 2 )
      vaL [ i ] =  64;
   for ( i = 1 ; i < 8 ; i += 2 )
      vaL [ i ] =  -64;
   for ( i = 0 ; i < 8 ; i++ )
      vaR [ i ] =  i;

   cout << "The initial operand valarray is: ( ";
      for ( i = 0 ; i < 8 ; i++ )
         cout << vaL [ i ] << " ";
   cout << ")." << endl;

   cout << "The  right valarray is: ( ";
      for ( i = 0 ; i < 8 ; i++ )
         cout << vaR [ i ] << " ";
   cout << ")." << endl;

   vaL >>= vaR;
   cout << "The element-by-element result of "
        << "the right shift is the"
        << endl << "valarray: ( ";
      for ( i = 0 ; i < 8 ; i++ )
         cout << vaL [ i ] << " ";
   cout << ")." << endl;
}
The initial operand valarray is: ( 64 -64 64 -64 64 -64 64 -64 ).
The  right valarray is: ( 0 1 2 3 4 5 6 7 ).
The element-by-element result of the right shift is the
valarray: ( 64 -32 16 -8 4 -2 1 -1 ).

operator<<=

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

valarray<Type>& operator<<=(const valarray<Type>& right);

valarray<Type>& operator<<=(const Type& right);

Параметры

right
Значение, указывающее количество сдвигов влево или valarray элементы которого указывают на количество элементов влево.

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

Объект, valarray элементы которого были смещены влево, указанное в right.

Замечания

Для чисел со знаком их знак сохраняется.

Пример

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

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

   valarray<int> vaL ( 8 ), vaR ( 8 );
   for ( i = 0 ; i < 8 ; i += 2 )
      vaL [ i ] =  1;
   for ( i = 1 ; i < 8 ; i += 2 )
      vaL [ i ] =  -1;
   for ( i = 0 ; i < 8 ; i++ )
      vaR [ i ] =  i;

   cout << "The initial operand valarray is: ( ";
      for ( i = 0 ; i < 8 ; i++ )
         cout << vaL [ i ] << " ";
   cout << ")." << endl;

   cout << "The  right valarray is: ( ";
      for ( i = 0 ; i < 8 ; i++ )
         cout << vaR [ i ] << " ";
   cout << ")." << endl;

   vaL <<= vaR;
   cout << "The element-by-element result of "
        << "the left shift"
        << endl << "on the operand array is the valarray:"
        << endl << "( ";
      for ( i = 0 ; i < 8 ; i++ )
         cout << vaL [ i ] << " ";
   cout << ")." << endl;
}
The initial operand valarray is: ( 1 -1 1 -1 1 -1 1 -1 ).
The  right valarray is: ( 0 1 2 3 4 5 6 7 ).
The element-by-element result of the left shift
on the operand array is the valarray:
( 1 -2 4 -8 16 -32 64 -128 ).

operator*=

Поэлементно умножает элементы указанного valarray или значение типа элемента на операнд valarray.

valarray<Type>& operator*=(const valarray<Type>& right);

valarray<Type>& operator*=(const Type& right);

Параметры

right
Или valarray значение типа элемента, идентичного типу операнда valarray , который должен умножать, мудреный элемент, операнду valarray.

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

Элементы valarray которого являются элементом мудрого продукта операнда valarray и right.

Пример

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

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

   valarray<int> vaL ( 8 ), vaR ( 8 );
   for ( i = 0 ; i < 8 ; i += 2 )
      vaL [ i ] =  2;
   for ( i = 1 ; i < 8 ; i += 2 )
      vaL [ i ] =  -1;
   for ( i = 0 ; i < 8 ; i++ )
      vaR [ i ] =  i;

   cout << "The initial valarray is: ( ";
      for ( i = 0 ; i < 8 ; i++ )
         cout << vaL [ i ] << " ";
   cout << ")." << endl;

   cout << "The initial Right valarray is: ( ";
      for ( i = 0 ; i < 8 ; i++ )
         cout << vaR [ i ] << " ";
   cout << ")." << endl;

   vaL *= vaR;
   cout << "The element-by-element result of "
        << "the multiplication is the"
        << endl << "valarray: ( ";
      for ( i = 0 ; i < 8 ; i++ )
         cout << vaL [ i ] << " ";
   cout << ")." << endl;
}
/* Output:
The initial valarray is: ( 2 -1 2 -1 2 -1 2 -1 ).
The initial Right valarray is: ( 0 1 2 3 4 5 6 7 ).
The element-by-element result of the multiplication is the
valarray: ( 0 -1 4 -3 8 -5 12 -7 ).
*/

operator+

Унарный оператор, который прибавляет единицу к каждому элементу в valarray. Для обычных арифметических значений эта операция не действует.

valarray<Type> operator+() const;

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

Элемент valarray , элементы которого являются унарными плюс результатом массива операнда.

Пример

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

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

   valarray<int> vaL ( 10 );
   valarray<int> vaPLUS ( 10 );
   for ( i = 0 ; i < 10 ; i += 2 )
      vaL [ i ] =  -i;
   for ( i = 1 ; i < 10 ; i += 2 )
      vaL [ i ] =  i-1;

   cout << "The initial valarray is:  ( ";
      for ( i = 0 ; i < 10 ; i++ )
         cout << vaL [ i ] << " ";
   cout << ")." << endl;

   vaPLUS = +vaL;
   cout << "The element-by-element result of "
        << "the operator+ is the"
        << endl << "valarray: ( ";
      for ( i = 0 ; i < 10 ; i++ )
         cout << vaPLUS [ i ] << " ";
   cout << ")." << endl;
}
The initial valarray is:  ( 0 0 -2 2 -4 4 -6 6 -8 8 ).
The element-by-element result of the operator+ is the
valarray: ( 0 0 -2 2 -4 4 -6 6 -8 8 ).

operator+=

Поэлементно прибавляет элементы указанного valarray или значение типа элемента к операнду valarray.

valarray<Type>& operator+=(const valarray<Type>& right);

valarray<Type>& operator+=(const Type& right);

Параметры

right
Или valarray значение типа элемента, идентичного типу операнда valarray , который должен быть добавлен, мудрый элементом, в операнду valarray.

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

Элемент valarray , элементы которого являются элементно-мудрой суммой операнда valarray и right.

Пример

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

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

   valarray<int> vaL ( 8 ), vaR ( 8 );
   for ( i = 0 ; i < 8 ; i += 2 )
      vaL [ i ] =  2;
   for ( i = 1 ; i < 8 ; i += 2 )
      vaL [ i ] =  -1;
   for ( i = 0 ; i < 8 ; i++ )
      vaR [ i ] =  i;

   cout << "The initial valarray is: ( ";
      for (i = 0 ; i < 8 ; i++ )
         cout << vaL [ i ] << " ";
   cout << ")." << endl;

   cout << "The initial  right valarray is: ( ";
      for (i = 0 ; i < 8 ; i++ )
         cout << vaR [ i ] << " ";
   cout << ")." << endl;

   vaL += vaR;
   cout << "The element-by-element result of "
        << "the sum is the"
        << endl << "valarray: ( ";
      for (i = 0 ; i < 8 ; i++ )
         cout << vaL [ i ] << " ";
   cout << ")." << endl;
}
The initial valarray is: ( 2 -1 2 -1 2 -1 2 -1 ).
The initial  right valarray is: ( 0 1 2 3 4 5 6 7 ).
The element-by-element result of the sum is the
valarray: ( 2 0 4 2 6 4 8 6 ).

operator-

Унарный оператор, который применяет арифметическое отрицание к каждому элементу в объекте valarray.

valarray<Type> operator-() const;

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

Элемент valarray , элементы которого арифметически отрицаются из элементов операнда valarray.

Пример

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

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

   valarray<int> vaL ( 10 );
   valarray<int> vaMINUS ( 10 );
   for ( i = 0 ; i < 10 ; i += 2 )
      vaL [ i ] =  -i;
   for ( i = 1 ; i < 10 ; i += 2 )
      vaL [ i ] =  i-1;

   cout << "The initial valarray is:  ( ";
      for ( i = 0 ; i < 10 ; i++ )
         cout << vaL [ i ] << " ";
   cout << ")." << endl;

   vaMINUS = -vaL;
   cout << "The element-by-element result of "
        << "the operator- is the"
        << endl << "valarray: ( ";
      for ( i = 0 ; i < 10 ; i++ )
         cout << vaMINUS [ i ] << " ";
   cout << ")." << endl;
}
The initial valarray is:  ( 0 0 -2 2 -4 4 -6 6 -8 8 ).
The element-by-element result of the operator- is the
valarray: ( 0 0 2 -2 4 -4 6 -6 8 -8 ).

operator-=

Поэлементно вычитает элементы указанного valarray или значение типа элемента из операнда valarray.

valarray<Type>& operator-=(const valarray<Type>& right);

valarray<Type>& operator-=(const Type& right);

Параметры

right
Значение valarray или тип элемента, идентичный типу операнда, который должен вычитаться из операнда valarrayvalarray.

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

Элемент valarray , элементы которого являются элементно-мудрой разницей операнда valarray и right.

Пример

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

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

   valarray<int> vaL ( 8 ), vaR ( 8 );
   for ( i = 0 ; i < 8 ; i += 2 )
      vaL [ i ] =  10;
   for ( i = 1 ; i < 8 ; i += 2 )
      vaL [ i ] =  0;
   for ( i = 0 ; i < 8 ; i++ )
      vaR [ i ] =  i;

   cout << "The initial valarray is: ( ";
      for (i = 0 ; i < 8 ; i++ )
         cout << vaL [ i ] << " ";
   cout << ")." << endl;

   cout << "The initial  right valarray is: ( ";
      for ( i = 0 ; i < 8 ; i++ )
         cout << vaR [ i ] << " ";
   cout << ")." << endl;

   vaL -= vaR;
   cout << "The element-by-element result of "
        << "the difference is the"
        << endl << "valarray: ( ";
      for ( i = 0 ; i < 8 ; i++ )
         cout << vaL [ i ] << " ";
   cout << ")." << endl;
}
The initial valarray is: ( 10 0 10 0 10 0 10 0 ).
The initial  right valarray is: ( 0 1 2 3 4 5 6 7 ).
The element-by-element result of the difference is the
valarray: ( 10 -1 8 -3 6 -5 4 -7 ).

operator/=

Поэлементно делит операнд valarray на элементы указанного valarray или значение типа элемента.

valarray<Type>& operator/=(const valarray<Type>& right);

valarray<Type>& operator/=(const Type& right);

Параметры

right
Или valarray значение типа элемента, идентичного типу операнда, который должен быть разделен на операнду valarrayvalarray.

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

Элемент valarray , элемент которого является элементно-мудрым кворотом операнда valarray , разделенным на right.

Пример

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

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

   valarray<double> vaL ( 6 ), vaR ( 6 );
   for ( i = 0 ; i < 6 ; i += 2 )
      vaL [ i ] =  100;
   for ( i = 1 ; i < 6 ; i += 2 )
      vaL [ i ] =  -100;
   for ( i = 0 ; i < 6 ; i++ )
      vaR [ i ] =  2*i;

   cout << "The initial valarray is: ( ";
      for (i = 0 ; i < 6 ; i++ )
         cout << vaL [ i ] << " ";
   cout << ")." << endl;

   cout << "The initial Right valarray is: ( ";
      for (i = 0 ; i < 6 ; i++ )
         cout << vaR [ i ] << " ";
   cout << ")." << endl;

   vaL /= vaR;
   cout << "The element-by-element result of "
        << "the quotient is the"
        << endl << "valarray: ( ";
      for (i = 0 ; i < 6 ; i++ )
         cout << vaL [ i ] << " ";
   cout << ")." << endl;
}
The initial valarray is: ( 100 -100 100 -100 100 -100 ).
The initial Right valarray is: ( 0 2 4 6 8 10 ).
The element-by-element result of the quotient is the
valarray: ( inf -50 25 -16.6667 12.5 -10 ).

operator=

Назначает элементы для valarray, значения которых задаются либо непосредственно или как часть другого valarray, либо с помощью slice_array, gslice_array, mask_array или indirect_array.

valarray<Type>& operator=(const valarray<Type>& right);

valarray<Type>& operator=(valarray<Type>&& right);

valarray<Type>& operator=(const Type& val);

valarray<Type>& operator=(const slice_array<Type>& slicearray);

valarray<Type>& operator=(const gslice_array<Type>& gslicearray);

valarray<Type>& operator=(const mask_array<Type>& maskarray);

valarray<Type>& operator=(const indirect_array<Type>& indarray);

Параметры

right
Копируется valarray в операнду valarray.

val
Значение, назначенное элементам операнда valarray.

slicearray
Копируется slice_array в операнду valarray.

gslicearray
Копируется gslice_array в операнду valarray.

maskarray
Копируется mask_array в операнду valarray.

indarray
Копируется indirect_array в операнду valarray.

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

Первый оператор-член заменяет управляемую последовательность копией последовательности, управляемой right.

Второй оператор-член совпадает с первым, но с декларатором ссылки Rvalue: &&

Третий оператор-член заменяет каждый элемент управляемой последовательности копией val.

Остальные операторы-члены заменяют эти элементы управляемой последовательности, выбранные их аргументами, которые создаются только с помощью operator[].

Если значение элемента в новой управляемой последовательности зависит от элемента в начальной управляемой последовательности, результат не определен.

Замечания

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

Пример

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

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

   valarray<int> va ( 10 ), vaR ( 10 );
   for ( i = 0 ; i < 10 ; i += 1 )
      va [ i ] = i;
   for ( i = 0 ; i < 10 ; i+=1 )
      vaR [ i ] = 10 -  i;

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

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

   // Assigning vaR to va with the first member function
   va = vaR;
   cout << "The reassigned valarray va is:";
   for ( i = 0 ; i < 10 ; i++ )
      cout << " " << va [ i ];
   cout << endl;

   // Assigning elements of value 10 to va
   // with the second member function
   va = 10;
   cout << "The reassigned valarray va is:";
      for ( i = 0 ; i < 10 ; i++ )
         cout << " " << va [ i ];
   cout << endl;
}
The operand valarray va is: 0 1 2 3 4 5 6 7 8 9
The operand valarray vaR is: 10 9 8 7 6 5 4 3 2 1
The reassigned valarray va is: 10 9 8 7 6 5 4 3 2 1
The reassigned valarray va is: 10 10 10 10 10 10 10 10 10 10

operator[]

Возвращает ссылку на элемент или его значение по указанному индексу или для определенного подмножества.

Type& operator[](size_t index);

slice_array<Type> operator[](slice slicearray);

gslice_array<Type> operator[](const gslice& gslicearray);

mask_array<Type> operator[](const valarray<bool>& boolarray);

indirect_array<Type> operator[](const valarray<size_t>& indarray);

Type operator[](size_t index) const;

valarray<Type> operator[](slice slicearray) const;

valarray<Type> operator[](const gslice& gslicearray) const;

valarray<Type> operator[](const valarray<bool>& boolarray) const;

valarray<Type> operator[](const valarray<size_t>& indarray) const;

Параметры

index
Индекс элемента, которому будет присвоено значение.

slicearray
valarray Объект, slice_array указывающий подмножество, которое нужно выбрать или вернуть в новоеvalarray.

gslicearray
valarray Объект, gslice_array указывающий подмножество, которое нужно выбрать или вернуть в новоеvalarray.

boolarray
valarray Объект, bool_array указывающий подмножество, которое нужно выбрать или вернуть в новоеvalarray.

indarray
valarray Объектindirect_array, указывающий подмножество, которое нужно выбрать или вернуть в новоеvalarray.

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

Ссылка на элемент или его значение для указанного индекса или подмножества.

Замечания

Оператор-член перегружен, чтобы предоставить несколько способов выбора последовательностей элементов из тех, которые управляются *this. Первая группа из пяти операторов-членов работает вместе с различными перегрузками operator= (и другими операторами назначения), чтобы разрешить выборочную замену (срез) управляемой последовательности. Выбранные элементы должны существовать.

При компиляции, определяемой _ITERATOR_DEBUG_LEVEL как 1 или 2, ошибка среды выполнения возникает при попытке доступа к элементу за пределами границ.valarray Дополнительные сведения см. в разделе "Проверенные итераторы".

Пример

Примеры объявления и использования operator[]см. в примерах.slice::slicegslice::gslice

operator^=

Получает побитовое монопольное или (^) valarray с заданным valarray или значением типа элемента.

valarray<Type>& operator^=(const valarray<Type>& right);

valarray<Type>& operator^=(const Type& right);

Параметры

right
valarray Или значение типа элемента, идентичного типу операнда, который должен объединяться побитовой монопольной или (XOR) оператором (^) с операндомvalarrayvalarray.

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

Элемент valarray , элементы которого являются побитовой монопольной или (XOR) операнда valarray и right.

Замечания

Побитовая монопольная или, называемая XOR и обозначаемая оператором ^, имеет следующую семантику: заданные биты b1 и b2имеет b1 ^ b2 значение 1, если один из элементов равен 1, и 0, если оба элемента равны 0 или 1.

Пример

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

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

    valarray<int> vaL ( 10 ), vaR ( 10 );
    for ( i = 0 ; i < 10 ; i += 2 )
        vaL [ i ] =  1;
    for ( i = 1 ; i < 10 ; i += 2 )
        vaL [ i ] =  0;
    for ( i = 0 ; i < 10 ; i += 3 )
        vaR [ i ] =  i;
    for ( i = 1 ; i < 10 ; i += 3 )
        vaR [ i ] =  i-1;
    for ( i = 2 ; i < 10 ; i += 3 )
        vaR [ i ] =  i-1;

    cout << "The initial operand valarray is:  ( ";
        for (i = 0 ; i < 10 ; i++ )
            cout << vaL [ i ] << " ";
    cout << ")." << endl;

    cout << "The  right valarray is: ( ";
        for ( i = 0 ; i < 10 ; i++ )
            cout << vaR [ i ] << " ";
    cout << ")." << endl;

    vaL ^= vaR;
    cout << "The element-by-element result of "
        << "the bitwise XOR operator^= is the"
        << endl << "valarray: ( ";
        for (i = 0 ; i < 10 ; i++ )
            cout << vaL [ i ] << " ";
    cout << ")." << endl;
}
The initial operand valarray is:  ( 1 0 1 0 1 0 1 0 1 0 ).
The  right valarray is: ( 0 0 1 3 3 4 6 6 7 9 ).
The element-by-element result of the bitwise XOR operator^= is the
valarray: ( 1 0 0 3 2 4 7 6 6 9 ).

operator|=

Получает побитовое ИЛИ (|) элементов массива с соответствующими элементами в указанном valarray или со значением типа элемента.

valarray<Type>& operator|=(const valarray<Type>& right);

valarray<Type>& operator|=(const Type& right);

Параметры

right
Или valarray значение типа элемента, идентичного типу операнда valarray , который должен быть объединенным, элементно-мудрым, по битовой или (|) с операндом valarray.

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

Элемент valarray , элементы которого являются побитовой побитовой или (|) операнда valarrayright.

Замечания

Побитовая операция может использоваться только для управления битами в целочисленных типах данных, таких как char и int. Он не работает над floatтипами данных, а doubleтакже boollong doublevoidс другими, более сложными типами данных.

Битовое ИЛИ (|) применяется к типу данных на уровне отдельных битов. Заданы биты и b2, b1 | b2 если по крайней мере один из битов b1 равен 1; 0, если оба бита равно 0.

Пример

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

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

   valarray<int> vaL ( 10 ), vaR ( 10 );
   for ( i = 0 ; i < 10 ; i += 2 )
      vaL [ i ] =  1;
   for ( i = 1 ; i < 10 ; i += 2 )
      vaL [ i ] =  0;
   for ( i = 0 ; i < 10 ; i += 3 )
      vaR [ i ] =  i;
   for ( i = 1 ; i < 10 ; i += 3 )
      vaR [ i ] =  i-1;
   for ( i = 2 ; i < 10 ; i += 3 )
      vaR [ i ] =  i-1;

   cout << "The initial operand valarray is:"
        << endl << "( ";
      for ( i = 0 ; i < 10 ; i++ )
         cout << vaL [ i ] << " ";
   cout << ")." << endl;

   cout << "The  right valarray is:"
        << endl << "( ";
      for ( i = 0 ; i < 10 ; i++ )
         cout << vaR [ i ] << " ";
   cout << ")." << endl;

   vaL |= vaR;
   cout << "The element-by-element result of "
        << "the bitwise OR"
        << endl << "operator|= is the valarray:"
        << endl << "( ";
      for (i = 0 ; i < 10 ; i++ )
         cout << vaL [ i ] << " ";
   cout << ")." << endl;
}
The initial operand valarray is:
( 1 0 1 0 1 0 1 0 1 0 ).
The  right valarray is:
( 0 0 1 3 3 4 6 6 7 9 ).
The element-by-element result of the bitwise OR
operator|= is the valarray:
( 1 0 1 3 3 4 7 6 7 9 ).

operator~

Унарный оператор, который получает побитовое дополнение значений каждого элемента в объекте valarray.

valarray<Type> operator~() const;

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

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

Замечания

Побитовая операция может управлять битами только в целочисленных типах, таких как char и int. Он не работает над floatтипами данных, а doubleтакже boollong doublevoidс другими, более сложными типами данных.

Оператор унарного битового дополнения ~ применяется к типу данных на уровне отдельных битов. b~b Если значение равно 0 и 0b, имеет значение 1 b бита.

Пример

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

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

    valarray<unsigned short int> vaL1 ( 10 );
    valarray<unsigned short int> vaNOT1 ( 10 );
    for ( i = 0 ; i < 10 ; i += 2 )
        vaL1 [ i ] =  i;
    for ( i = 1 ; i < 10 ; i += 2 )
        vaL1 [ i ] =  5*i;

    cout << "The initial valarray <unsigned short int> is:  ( ";
        for ( i = 0 ; i < 10 ; i++ )
            cout << vaL1 [ i ] << " ";
    cout << ")." << endl;

    vaNOT1 = ~vaL1;
    cout << "The element-by-element result of "
        << "the bitwise NOT operator~ is the"
        << endl << "valarray: ( ";
        for ( i = 0 ; i < 10 ; i++ )
            cout << vaNOT1 [ i ] << " ";
    cout << ")." << endl << endl;

    valarray<int> vaL2 ( 10 );
    valarray<int> vaNOT2 ( 10 );
    for ( i = 0 ; i < 10 ; i += 2 )
        vaL2 [ i ] =  i;
    for ( i = 1 ; i < 10 ; i += 2 )
        vaL2 [ i ] =  -2 * i;

    cout << "The initial valarray <int> is:  ( ";
        for ( i = 0 ; i < 10 ; i++ )
            cout << vaL2 [ i ] << " ";
    cout << ")." << endl;

    vaNOT2 = ~vaL2;
    cout << "The element-by-element result of "
        << "the bitwise NOT operator~ is the"
        << endl << "valarray: ( ";
        for ( i = 0 ; i < 10 ; i++ )
            cout << vaNOT2 [ i ] << " ";
    cout << ")." << endl;

    // The negative numbers are represented using
    // the two's complement approach, so adding one
    // to the flipped bits returns the negative elements
    vaNOT2 = vaNOT2 + 1;
    cout << "The element-by-element result of "
        << "adding one"
        << endl << "is the negative of the "
        << "original elements the"
        << endl << "valarray: ( ";
        for ( i = 0 ; i < 10 ; i++ )
            cout << vaNOT2 [ i ] << " ";
    cout << ")." << endl;
}
The initial valarray <unsigned short int> is:  ( 0 5 2 15 4 25 6 35 8 45 ).
The element-by-element result of the bitwise NOT operator~ is the
valarray: ( 65535 65530 65533 65520 65531 65510 65529 65500 65527 65490 ).

The initial valarray <int> is:  ( 0 -2 2 -6 4 -10 6 -14 8 -18 ).
The element-by-element result of the bitwise NOT operator~ is the
valarray: ( -1 1 -3 5 -5 9 -7 13 -9 17 ).
The element-by-element result of adding one
is the negative of the original elements the
valarray: ( 0 2 -2 6 -4 10 -6 14 -8 18 ).

resize

Изменяет количество элементов в valarray указанном числе.

void resize(
    size_t new_size);

void resize(
    size_t new_size,
    const Type val);

Параметры

new_size
Количество элементов в измененном размере valarray.

val
Значение, которое необходимо указать элементам измененного valarrayразмера.

Замечания

Первая функция-член инициализирует элементы с помощью их конструктора по умолчанию.

Все указатели и ссылки на элементы в управляемой последовательности становятся недействительными.

Пример

В следующем примере показано использование valarray::resize функции-члена.

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

int main()
{
    using namespace std;
    int i;
    size_t size1, sizeNew;

    valarray<int> va1(10);
    for (i = 0; i < 10; i+=1)
        va1[i] = i;

    cout << "The valarray contains ( ";
        for (i = 0; i < 10; i++)
            cout << va1[i] << " ";
    cout << ")." << endl;

    size1 = va1.size();
    cout << "The number of elements in the valarray is: "
         << size1  << "." <<endl << endl;

    va1.resize(15, 10);

    cout << "The valarray contains ( ";
        for (i = 0; i < 15; i++)
            cout << va1[i] << " ";
    cout << ")." << endl;
    sizeNew = va1.size();
    cout << "The number of elements in the resized valarray is: "
         << sizeNew  << "." <<endl << endl;
}
The valarray contains ( 0 1 2 3 4 5 6 7 8 9 ).
The number of elements in the valarray is: 10.

The valarray contains ( 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 ).
The number of elements in the resized valarray is: 15.

shift

Сдвигает все элементы в valarray заданном количестве мест.

valarray<Type> shift(int count) const;

Параметры

count
Количество позиций, на которые элементы будут сдвинуты вперед.

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

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

Замечания

При передаче положительного значения count элементы смещаются влево на count позиций с заполнением освобожденных позиций нулями.

При передаче отрицательного значения count элементы смещаются вправо на count позиций с заполнением освобожденных позиций нулями.

Пример

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

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

   valarray<int> va1 ( 10 ), va2 ( 10 );
   for ( i = 0 ; i < 10 ; i += 1 )
      va1 [ i ] =  i;
   for ( i = 0 ; i < 10 ; i += 1 )
      va2 [ i ] = 10 -  i;

   cout << "The operand valarray va1(10) is: ( ";
      for ( i = 0 ; i < 10 ; i++ )
         cout << va1 [ i ] << " ";
   cout << ")." << endl;

   // A positive parameter shifts elements left
   va1 = va1.shift ( 4 );
   cout << "The shifted valarray va1 is: va1.shift (4) = ( ";
      for ( i = 0 ; i < 10 ; i++ )
         cout << va1 [ i ] << " ";
   cout << ")." << endl;

   cout << "The operand valarray va2(10) is: ( ";
      for ( i = 0 ; i < 10 ; i++ )
         cout << va2 [ i ] << " ";
   cout << ")." << endl;

   // A negative parameter shifts elements right
   va2 = va2.shift ( - 4 );
   cout << "The shifted valarray va2 is: va2.shift (-4) = ( ";
      for ( i = 0 ; i < 10 ; i++ )
         cout << va2 [ i ] << " ";
   cout << ")." << endl;
}
The operand valarray va1(10) is: ( 0 1 2 3 4 5 6 7 8 9 ).
The shifted valarray va1 is: va1.shift (4) = ( 4 5 6 7 8 9 0 0 0 0 ).
The operand valarray va2(10) is: ( 10 9 8 7 6 5 4 3 2 1 ).
The shifted valarray va2 is: va2.shift (-4) = ( 0 0 0 0 10 9 8 7 6 5 ).

size

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

size_t size() const;

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

Количество элементов в операнде valarray.

Пример

В следующем примере показано использование valarray::size функции-члена.

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

int main()
{
    using namespace std;
    int i;
    size_t size1, size2;

    valarray<int> va1(10), va2(12);
    for (i = 0; i < 10; i += 1)
        va1[i] =  i;
    for (i = 0; i < 10; i += 1)
        va2[i] =  i;

    cout << "The operand valarray va1(10) is: ( ";
        for (i = 0; i < 10; i++)
            cout << va1[i] << " ";
    cout << ")." << endl;

    size1 = va1.size();
    cout << "The number of elements in the valarray va1 is: va1.size = "
         << size1  << "." <<endl << endl;

    cout << "The operand valarray va2(12) is: ( ";
        for (i = 0; i < 10; i++)
            cout << va2[i] << " ";
    cout << ")." << endl;

    size2 = va2.size();
    cout << "The number of elements in the valarray va2 is: va2.size = "
         << size2  << "." << endl << endl;

    // Initializing two more elements to va2
    va2[10] = 10;
    va2[11] = 11;
    cout << "After initializing two more elements,\n"
         << "the operand valarray va2(12) is now: ( ";
        for (i = 0; i < 12; i++)
            cout << va2[i] << " ";
    cout << ")." << endl;
    cout << "The number of elements in the valarray va2 is still: "
         << size2  << "." << endl;
}
The operand valarray va1(10) is: ( 0 1 2 3 4 5 6 7 8 9 ).
The number of elements in the valarray va1 is: va1.size = 10.

The operand valarray va2(12) is: ( 0 1 2 3 4 5 6 7 8 9 ).
The number of elements in the valarray va2 is: va2.size = 12.

After initializing two more elements,
the operand valarray va2(12) is now: ( 0 1 2 3 4 5 6 7 8 9 10 11 ).
The number of elements in the valarray va2 is still: 12.

sum

Определяет сумму всех элементов в valarray с ненулевой длиной.

Type sum() const;

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

Сумма элементов операнда valarray.

Замечания

Если длина превышает одну, функция-член добавляет значения в сумму, применяя operator+= между парами элементов класса Type. Это означает, что оператор должен быть указан для элементов типа Type.

Пример

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

int main( )
{
    using namespace std;
    int i;
    int sumva = 0;

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

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

    sumva = va.sum ( );
    cout << "The sum of elements in the valarray is: "
        << sumva  << "." <<endl;
}
The operand valarray va (10) is: ( 0 1 2 3 4 5 6 7 8 9 ).
The sum of elements in the valarray is: 45.

swap

Меняет местами элементы двух объектов valarray.

void swap(valarray& right);

Параметры

right
Объект valarray, предоставляющий элементы, которые следует поменять местами.

Замечания

Функция-член меняет местами управляемые последовательности между *this и right. Он делает это в постоянном времени, он создает никаких исключений, и он не делает ссылок, указателей или итераторов на элементы в двух управляемых последовательностях.

valarray

Создает valarray определенного размера или с элементами, имеющими указанное значение, либо в качестве копии другого valarray или подмножества другого valarray.

valarray();

explicit valarray(
    size_t count);

valarray(
    const Type& val,
    size_t count);

valarray(
    const Type* ptr,
    size_t count);

valarray(
    const valarray<Type>& right);

valarray(
    const slice_array<Type>& sliceArray);

valarray(
    const gslice_array<Type>& gsliceArray);

valarray(
    const mask_array<Type>& maskArray);

valarray(
    const indirect_array<Type>& indArray);

valarray(
    valarray<Type>&& tight);

valarray(
    initializer_list<Type> iList);

Параметры

count
Число элементов, которые должны находиться в элементе valarray.

val
Значение, используемое при инициализации элементов в элементе valarray.

ptr
Указатель на значения, используемые для инициализации элементов в элементе valarray.

right
Существующая valarray для инициализации нового valarray.

sliceArray
Значение slice_array элемента, которое необходимо использовать при инициализации элементов создаваемого valarray объекта.

gsliceArray
Значение gslice_array элемента, которое необходимо использовать при инициализации элементов создаваемого valarray объекта.

maskArray
Значение mask_array элемента, которое необходимо использовать при инициализации элементов создаваемого valarray объекта.

indArray
Значение indirect_array элемента, которое необходимо использовать при инициализации элементов создаваемого valarray объекта.

iList
Содержащий initializer_list элементы для копирования.

Замечания

Первый конструктор (по умолчанию) инициализирует объект пустым valarray. Следующие три конструктора каждый инициализирует объект на valarraycount элементы следующим образом:

  • Для явного valarray(size_t count) каждый элемент инициализируется с помощью конструктора по умолчанию.

  • Для valarray(const Type& val, count) каждый элемент инициализируется значением val.

  • Для valarray(const Type* ptr, count)элемента в позиции I инициализируется с ptr[I].

Каждый оставшийся конструктор инициализирует объект в объект valarray<Type> , определенный подмножеством, указанным в аргументе.

Последний конструктор совпадает с последним, но с декларатором ссылки Rvalue: &&

Пример

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

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

    // The second member function
    valarray<int> va(10);
    for (auto i : va){
        va[i] = 2 * (i + 1);
    }

    cout << "The operand valarray va is:\n(";
    for (auto i : va) {
        cout << " " << va[i];
    }
    cout << " )" << endl;

    slice Slice(2, 4, 3);

    // The fifth member function
    valarray<int> vaSlice = va[Slice];

    cout << "The new valarray initialized from the slice is vaSlice =\n"
        << "va[slice( 2, 4, 3)] = (";
    for (int i = 0; i < 3; i++) {
        cout << " " << vaSlice[i];
    }
    cout << " )" << endl;

    valarray<int> va2{{ 1, 2, 3, 4 }};
    for (auto& v : va2) {
        cout << v << " ";
    }
    cout << endl;
}
The operand valarray va is:
( 0 2 2 2 2 2 2 2 2 2 )
The new valarray initialized from the slice is vaSlice =
va[slice( 2, 4, 3)] = ( 0 0 0 )
1 2 3 4

value_type

Тип, представляющий тип элемента, хранящегося в valarray.

typedef Type value_type;

Замечания

Этот тип является синонимом для параметра шаблона Type.

Пример

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

int main( )
{
    using namespace std;
    int i;
    valarray<int> va ( 10 );
    for ( i = 0 ; i < 10 ; i += 2 )
        va [ i ] =  i;
    for ( i = 1 ; i < 10 ; i += 2 )
        va [ i ] =  -1;

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

    // value_type declaration and initialization:
    valarray<int>::value_type Right = 10;

    cout << "The declared value_type Right is: "
            << Right << endl;
    va *= Right;
    cout << "The resulting valarray is:  ( ";
        for ( i = 0 ; i < 10 ; i++ )
            cout << va [ i ] << " ";
    cout << ")." << endl;
}
The initial operand valarray is:  ( 0 -1 2 -1 4 -1 6 -1 8 -1 ).
The declared value_type Right is: 10
The resulting valarray is:  ( 0 -10 20 -10 40 -10 60 -10 80 -10 ).

См. также

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