Класс 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
, элементы которого являются битовой и (&
) операнда valarray
right
Замечания
Побитовая операция может использоваться только для управления битами в целочисленных типах данных, таких как char
и int
. Он не работает над float
типами данных, а double
также bool
long double
void
с другими, более сложными типами данных.
Битовое И (&
) применяется к типу данных на уровне отдельных битов. Если оба бита b1
b2
b1 & 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
или тип элемента, идентичный типу операнда, который должен вычитаться из операнда valarray
valarray
.
Возвращаемое значение
Элемент 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
значение типа элемента, идентичного типу операнда, который должен быть разделен на операнду valarray
valarray
.
Возвращаемое значение
Элемент 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::slice
gslice::gslice
operator^=
Получает побитовое монопольное или (^
) valarray
с заданным valarray
или значением типа элемента.
valarray<Type>& operator^=(const valarray<Type>& right);
valarray<Type>& operator^=(const Type& right);
Параметры
right
valarray
Или значение типа элемента, идентичного типу операнда, который должен объединяться побитовой монопольной или (XOR) оператором (^
) с операндомvalarray
valarray
.
Возвращаемое значение
Элемент 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
, элементы которого являются побитовой побитовой или (|
) операнда valarray
right
.
Замечания
Побитовая операция может использоваться только для управления битами в целочисленных типах данных, таких как char
и int
. Он не работает над float
типами данных, а double
также bool
long double
void
с другими, более сложными типами данных.
Битовое ИЛИ (|
) применяется к типу данных на уровне отдельных битов. Заданы биты и 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
также bool
long double
void
с другими, более сложными типами данных.
Оператор унарного битового дополнения ~
применяется к типу данных на уровне отдельных битов. 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
. Следующие три конструктора каждый инициализирует объект на valarray
count
элементы следующим образом:
Для явного
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 ).
См. также
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по