31#ifndef _GLIBCXX_VALARRAY
32#define _GLIBCXX_VALARRAY 1
35#pragma GCC system_header
44#if __cplusplus >= 201103L
49#define __glibcxx_want_hardened_valarray
50#define __glibcxx_want_valarray
53namespace std _GLIBCXX_VISIBILITY(default)
55_GLIBCXX_BEGIN_NAMESPACE_VERSION
57 template<
class _Clos,
typename _Tp>
60 template<
typename _Tp1,
typename _Tp2>
65 template<
class _Oper,
template<
class,
class>
class _Meta,
class _Dom>
69 template<
class,
class>
class _Meta1,
70 template<
class,
class>
class _Meta2,
71 class _Dom1,
class _Dom2>
74 template<
template<
class,
class>
class _Meta,
class _Dom>
77 template<
template<
class,
class>
class _Meta,
class _Dom>
80 template<
template<
class,
class>
class _Meta,
class _Dom>
83 template<
template<
class,
class>
class _Meta,
class _Dom>
86 template<
template<
class,
class>
class _Meta,
class _Dom>
90 using __detail::_UnClos;
91 using __detail::_BinClos;
92 using __detail::_SClos;
93 using __detail::_GClos;
94 using __detail::_IClos;
95 using __detail::_ValFunClos;
96 using __detail::_RefFunClos;
106_GLIBCXX_END_NAMESPACE_VERSION
112namespace std _GLIBCXX_VISIBILITY(default)
114_GLIBCXX_BEGIN_NAMESPACE_VERSION
141 typedef typename __fun<_Op, _Tp>::result_type __rt;
142 typedef _Expr<_UnClos<_Op, _ValArray, _Tp>, __rt> _Rt;
145 typedef _Tp value_type;
146#if __glibcxx_valarray >= 202511L
147 typedef _Tp* iterator;
148 typedef const _Tp* const_iterator;
167#if __cplusplus >= 201103L
184#if __cplusplus >= 201103L
190 valarray(
const _Expr<_Dom, _Tp>& __e);
202 valarray<_Tp>& operator=(const valarray<_Tp>& __v);
204#if __cplusplus >= 201103L
212 valarray<_Tp>&
operator=(valarray<_Tp>&& __v)
noexcept;
222 valarray<_Tp>&
operator=(
const _Tp& __t);
264#if __cplusplus >= 201103L
276 template<
class _Dom> valarray<_Tp>&
290 const _Tp&
operator[](
size_t)
const _GLIBCXX_NOTHROW;
352 valarray<_Tp>
operator[](
const valarray<bool>& __m)
const;
379 _Expr<_IClos<_ValArray, _Tp>, _Tp>
380 operator[](
const valarray<size_t>& __i)
const;
404 typename _UnaryOp<__bitwise_not>::_Rt
operator~()
const;
407 typename _UnaryOp<__logical_not>::_Rt
operator!()
const;
492#if __cplusplus >= 201103L
494 void swap(valarray<_Tp>& __v)
noexcept;
529 valarray<_Tp>
shift (
int __n)
const;
558 _Expr<_ValFunClos<_ValArray, _Tp>, _Tp>
apply(_Tp __func(_Tp))
const;
570 _Expr<_RefFunClos<_ValArray, _Tp>, _Tp>
apply(_Tp __func(
const _Tp&))
const;
581 void resize(
size_t __size, _Tp __c = _Tp());
583#if __glibcxx_valarray >= 202511L
595 begin() const noexcept
605 {
return _M_data + _M_size; }
610 {
return _M_data + _M_size; }
615 _Tp* __restrict__ _M_data;
617 friend struct _Array<_Tp>;
620#if __cpp_deduction_guides >= 201606
621 template<
typename _Tp,
size_t _Nm>
625 template<
typename _Tp>
629 __glibcxx_requires_subscript(__i);
633 template<
typename _Tp>
637 __glibcxx_requires_subscript(__i);
643_GLIBCXX_END_NAMESPACE_VERSION
653namespace std _GLIBCXX_VISIBILITY(default)
655_GLIBCXX_BEGIN_NAMESPACE_VERSION
662 template<
typename _Tp>
666 template<
typename _Tp>
669 : _M_size(__n), _M_data(__valarray_get_storage<_Tp>(__n))
670 { std::__valarray_default_construct(_M_data, _M_data + __n); }
672 template<
typename _Tp>
675 : _M_size(__n), _M_data(__valarray_get_storage<_Tp>(__n))
676 { std::__valarray_fill_construct(_M_data, _M_data + __n, __t); }
678 template<
typename _Tp>
681 : _M_size(__n), _M_data(__valarray_get_storage<_Tp>(__n))
683 __glibcxx_assert(__p != 0 || __n == 0);
684 std::__valarray_copy_construct(__p, __p + __n, _M_data);
687 template<
typename _Tp>
690 : _M_size(__v._M_size), _M_data(__valarray_get_storage<_Tp>(__v._M_size))
691 { std::__valarray_copy_construct(__v._M_data, __v._M_data + _M_size,
694#if __cplusplus >= 201103L
695 template<
typename _Tp>
698 : _M_size(__v._M_size), _M_data(__v._M_data)
705 template<
typename _Tp>
708 : _M_size(__sa._M_sz), _M_data(__valarray_get_storage<_Tp>(__sa._M_sz))
710 std::__valarray_copy_construct
711 (__sa._M_array, __sa._M_sz, __sa._M_stride, _Array<_Tp>(_M_data));
714 template<
typename _Tp>
717 : _M_size(__ga._M_index.
size()),
718 _M_data(__valarray_get_storage<_Tp>(_M_size))
720 std::__valarray_copy_construct
721 (__ga._M_array, _Array<size_t>(__ga._M_index),
722 _Array<_Tp>(_M_data), _M_size);
725 template<
typename _Tp>
728 : _M_size(__ma._M_sz), _M_data(__valarray_get_storage<_Tp>(__ma._M_sz))
730 std::__valarray_copy_construct
731 (__ma._M_array, __ma._M_mask, _Array<_Tp>(_M_data), _M_size);
734 template<
typename _Tp>
737 : _M_size(__ia._M_sz), _M_data(__valarray_get_storage<_Tp>(__ia._M_sz))
739 std::__valarray_copy_construct
740 (__ia._M_array, __ia._M_index, _Array<_Tp>(_M_data), _M_size);
743#if __cplusplus >= 201103L
744 template<
typename _Tp>
747 : _M_size(__l.
size()), _M_data(__valarray_get_storage<_Tp>(__l.
size()))
748 { std::__valarray_copy_construct(__l.begin(), __l.end(), _M_data); }
751 template<
typename _Tp>
template<
class _Dom>
754 : _M_size(__e.
size()), _M_data(__valarray_get_storage<_Tp>(_M_size))
755 { std::__valarray_copy_construct(__e, _M_size, _Array<_Tp>(_M_data)); }
757 template<
typename _Tp>
759 valarray<_Tp>::~valarray() _GLIBCXX_NOEXCEPT
761 std::__valarray_destroy_elements(_M_data, _M_data + _M_size);
762 std::__valarray_release_memory(_M_data, _M_size);
765 template<
typename _Tp>
771 if (_M_size == __v._M_size)
772 std::__valarray_copy(__v._M_data, _M_size, _M_data);
777 std::__valarray_destroy_elements(_M_data, _M_data + _M_size);
778 std::__valarray_release_memory(_M_data, _M_size);
780 _M_size = __v._M_size;
781 _M_data = __valarray_get_storage<_Tp>(_M_size);
782 std::__valarray_copy_construct(__v._M_data, __v._M_data + _M_size,
788#if __cplusplus >= 201103L
789 template<
typename _Tp>
795 std::__valarray_destroy_elements(_M_data, _M_data + _M_size);
796 std::__valarray_release_memory(_M_data, _M_size);
798 _M_size = __v._M_size;
799 _M_data = __v._M_data;
805 template<
typename _Tp>
811 if (_M_size == __l.size())
812 std::__valarray_copy(__l.begin(), __l.size(), _M_data);
817 std::__valarray_destroy_elements(_M_data, _M_data + _M_size);
818 std::__valarray_release_memory(_M_data, _M_size);
820 _M_size = __l.size();
821 _M_data = __valarray_get_storage<_Tp>(_M_size);
822 std::__valarray_copy_construct(__l.begin(), __l.begin() + _M_size,
829 template<
typename _Tp>
833 std::__valarray_fill(_M_data, _M_size, __t);
837 template<
typename _Tp>
841 __glibcxx_assert(_M_size == __sa._M_sz);
842 std::__valarray_copy(__sa._M_array, __sa._M_sz,
843 __sa._M_stride, _Array<_Tp>(_M_data));
847 template<
typename _Tp>
851 __glibcxx_assert(_M_size == __ga._M_index.
size());
852 std::__valarray_copy(__ga._M_array, _Array<size_t>(__ga._M_index),
853 _Array<_Tp>(_M_data), _M_size);
857 template<
typename _Tp>
861 __glibcxx_assert(_M_size == __ma._M_sz);
862 std::__valarray_copy(__ma._M_array, __ma._M_mask,
863 _Array<_Tp>(_M_data), _M_size);
867 template<
typename _Tp>
871 __glibcxx_assert(_M_size == __ia._M_sz);
872 std::__valarray_copy(__ia._M_array, __ia._M_index,
873 _Array<_Tp>(_M_data), _M_size);
877 template<
typename _Tp>
template<
class _Dom>
883 if (_M_size == __e.size())
888 for (
size_t __i = 0; __i < _M_size; ++__i)
889 _M_data[__i] = __e[__i];
895 std::__valarray_destroy_elements(_M_data, _M_data + _M_size);
896 std::__valarray_release_memory(_M_data, _M_size);
898 _M_size = __e.size();
899 _M_data = __valarray_get_storage<_Tp>(_M_size);
900 std::__valarray_copy_construct(__e, _M_size, _Array<_Tp>(_M_data));
905 template<
typename _Tp>
906 inline _Expr<_SClos<_ValArray,_Tp>, _Tp>
909 typedef _SClos<_ValArray,_Tp> _Closure;
910 return _Expr<_Closure, _Tp>(_Closure (_Array<_Tp>(_M_data), __s));
913 template<
typename _Tp>
918 template<
typename _Tp>
919 inline _Expr<_GClos<_ValArray,_Tp>, _Tp>
922 typedef _GClos<_ValArray,_Tp> _Closure;
923 return _Expr<_Closure, _Tp>
924 (_Closure(_Array<_Tp>(_M_data), __gs._M_index->_M_index));
927 template<
typename _Tp>
932 (_Array<_Tp>(_M_data), __gs._M_index->_M_index);
935 template<
typename _Tp>
940 size_t __e = __m.
size();
941 for (
size_t __i=0; __i<__e; ++__i)
943 __glibcxx_assert(__s <= _M_size);
945 _Array<bool> (__m)));
948 template<
typename _Tp>
953 size_t __e = __m.
size();
954 for (
size_t __i=0; __i<__e; ++__i)
956 __glibcxx_assert(__s <= _M_size);
960 template<
typename _Tp>
961 inline _Expr<_IClos<_ValArray,_Tp>, _Tp>
964 typedef _IClos<_ValArray,_Tp> _Closure;
965 return _Expr<_Closure, _Tp>(_Closure(*
this, __i));
968 template<
typename _Tp>
973 _Array<size_t>(__i));
976#if __cplusplus >= 201103L
981 std::swap(_M_size, __v._M_size);
982 std::swap(_M_data, __v._M_data);
995 __glibcxx_assert(_M_size > 0);
996 return std::__valarray_sum(_M_data, _M_data + _M_size);
1008 _Tp* __restrict__ __tmp_M_data =
1009 std::__valarray_get_storage<_Tp>(_M_size);
1012 std::__valarray_copy_construct(_M_data,
1013 _M_data + _M_size, __tmp_M_data);
1016 if (
size_t(__n) > _M_size)
1019 std::__valarray_copy_construct(_M_data + __n,
1020 _M_data + _M_size, __tmp_M_data);
1021 std::__valarray_default_construct(__tmp_M_data + _M_size - __n,
1022 __tmp_M_data + _M_size);
1026 if (-
size_t(__n) > _M_size)
1027 __n = -int(_M_size);
1029 std::__valarray_copy_construct(_M_data, _M_data + _M_size + __n,
1030 __tmp_M_data - __n);
1031 std::__valarray_default_construct(__tmp_M_data,
1032 __tmp_M_data - __n);
1035 __ret._M_size = _M_size;
1036 __ret._M_data = __tmp_M_data;
1049 _Tp* __restrict__ __tmp_M_data =
1050 std::__valarray_get_storage<_Tp>(_M_size);
1053 std::__valarray_copy_construct(_M_data,
1054 _M_data + _M_size, __tmp_M_data);
1057 if (
size_t(__n) > _M_size)
1058 __n = int(__n % _M_size);
1060 std::__valarray_copy_construct(_M_data, _M_data + __n,
1061 __tmp_M_data + _M_size - __n);
1062 std::__valarray_copy_construct(_M_data + __n, _M_data + _M_size,
1067 if (-
size_t(__n) > _M_size)
1068 __n = -int(-
size_t(__n) % _M_size);
1070 std::__valarray_copy_construct(_M_data + _M_size + __n,
1071 _M_data + _M_size, __tmp_M_data);
1072 std::__valarray_copy_construct(_M_data, _M_data + _M_size + __n,
1073 __tmp_M_data - __n);
1076 __ret._M_size = _M_size;
1077 __ret._M_data = __tmp_M_data;
1088 std::__valarray_destroy_elements(_M_data, _M_data + _M_size);
1091 std::__valarray_release_memory(_M_data, _M_size);
1093 _M_data = __valarray_get_storage<_Tp>(__n);
1095 std::__valarray_fill_construct(_M_data, _M_data + __n, __c);
1098 template<
typename _Tp>
1102 __glibcxx_assert(_M_size > 0);
1103 return *std::min_element(_M_data, _M_data + _M_size);
1106 template<
typename _Tp>
1110 __glibcxx_assert(_M_size > 0);
1111 return *std::max_element(_M_data, _M_data + _M_size);
1115 inline _Expr<_ValFunClos<_ValArray, _Tp>, _Tp>
1118 typedef _ValFunClos<_ValArray, _Tp> _Closure;
1119 return _Expr<_Closure, _Tp>(_Closure(*
this, __func));
1123 inline _Expr<_RefFunClos<_ValArray, _Tp>, _Tp>
1126 typedef _RefFunClos<_ValArray, _Tp> _Closure;
1127 return _Expr<_Closure, _Tp>(_Closure(*
this, __func));
1131#define _DEFINE_VALARRAY_UNARY_OPERATOR(_Op, _Name) \
1132 template<typename _Tp> \
1133 inline typename valarray<_Tp>::template _UnaryOp<_Name>::_Rt \
1134 valarray<_Tp>::operator _Op() const \
1136 typedef _UnClos<_Name, _ValArray, _Tp> _Closure; \
1137 typedef typename __fun<_Name, _Tp>::result_type _Rt; \
1138 return _Expr<_Closure, _Rt>(_Closure(*this)); \
1141 _DEFINE_VALARRAY_UNARY_OPERATOR(+, __unary_plus)
1142 _DEFINE_VALARRAY_UNARY_OPERATOR(-, __negate)
1143 _DEFINE_VALARRAY_UNARY_OPERATOR(~, __bitwise_not)
1144 _DEFINE_VALARRAY_UNARY_OPERATOR (!, __logical_not)
1146#undef _DEFINE_VALARRAY_UNARY_OPERATOR
1148#define _DEFINE_VALARRAY_AUGMENTED_ASSIGNMENT(_Op, _Name) \
1149 template<class _Tp> \
1150 inline valarray<_Tp>& \
1151 valarray<_Tp>::operator _Op##=(const _Tp &__t) \
1153 _Array_augmented_##_Name(_Array<_Tp>(_M_data), _M_size, __t); \
1157 template<class _Tp> \
1158 inline valarray<_Tp>& \
1159 valarray<_Tp>::operator _Op##=(const valarray<_Tp> &__v) \
1161 __glibcxx_assert(_M_size == __v._M_size); \
1162 _Array_augmented_##_Name(_Array<_Tp>(_M_data), _M_size, \
1163 _Array<_Tp>(__v._M_data)); \
1167_DEFINE_VALARRAY_AUGMENTED_ASSIGNMENT(+, __plus)
1168_DEFINE_VALARRAY_AUGMENTED_ASSIGNMENT(-, __minus)
1169_DEFINE_VALARRAY_AUGMENTED_ASSIGNMENT(*, __multiplies)
1170_DEFINE_VALARRAY_AUGMENTED_ASSIGNMENT(/, __divides)
1171_DEFINE_VALARRAY_AUGMENTED_ASSIGNMENT(%, __modulus)
1172_DEFINE_VALARRAY_AUGMENTED_ASSIGNMENT(^, __bitwise_xor)
1173_DEFINE_VALARRAY_AUGMENTED_ASSIGNMENT(&, __bitwise_and)
1174_DEFINE_VALARRAY_AUGMENTED_ASSIGNMENT(|, __bitwise_or)
1175_DEFINE_VALARRAY_AUGMENTED_ASSIGNMENT(<<, __shift_left)
1176_DEFINE_VALARRAY_AUGMENTED_ASSIGNMENT(>>, __shift_right)
1178#undef _DEFINE_VALARRAY_AUGMENTED_ASSIGNMENT
1180#define _DEFINE_VALARRAY_EXPR_AUGMENTED_ASSIGNMENT(_Op, _Name) \
1181 template<class _Tp> template<class _Dom> \
1182 inline valarray<_Tp>& \
1183 valarray<_Tp>::operator _Op##=(const _Expr<_Dom, _Tp>& __e) \
1185 _Array_augmented_##_Name(_Array<_Tp>(_M_data), __e, _M_size); \
1189_DEFINE_VALARRAY_EXPR_AUGMENTED_ASSIGNMENT(+, __plus)
1190_DEFINE_VALARRAY_EXPR_AUGMENTED_ASSIGNMENT(-, __minus)
1191_DEFINE_VALARRAY_EXPR_AUGMENTED_ASSIGNMENT(*, __multiplies)
1192_DEFINE_VALARRAY_EXPR_AUGMENTED_ASSIGNMENT(/, __divides)
1193_DEFINE_VALARRAY_EXPR_AUGMENTED_ASSIGNMENT(%, __modulus)
1194_DEFINE_VALARRAY_EXPR_AUGMENTED_ASSIGNMENT(^, __bitwise_xor)
1195_DEFINE_VALARRAY_EXPR_AUGMENTED_ASSIGNMENT(&, __bitwise_and)
1196_DEFINE_VALARRAY_EXPR_AUGMENTED_ASSIGNMENT(|, __bitwise_or)
1197_DEFINE_VALARRAY_EXPR_AUGMENTED_ASSIGNMENT(<<, __shift_left)
1198_DEFINE_VALARRAY_EXPR_AUGMENTED_ASSIGNMENT(>>, __shift_right)
1200#undef _DEFINE_VALARRAY_EXPR_AUGMENTED_ASSIGNMENT
1203#define _DEFINE_BINARY_OPERATOR(_Op, _Name) \
1204 template<typename _Tp> \
1205 inline _Expr<_BinClos<_Name, _ValArray, _ValArray, _Tp, _Tp>, \
1206 typename __fun<_Name, _Tp>::result_type> \
1207 operator _Op(const valarray<_Tp>& __v, const valarray<_Tp>& __w) \
1209 __glibcxx_assert(__v.size() == __w.size()); \
1210 typedef _BinClos<_Name, _ValArray, _ValArray, _Tp, _Tp> _Closure; \
1211 typedef typename __fun<_Name, _Tp>::result_type _Rt; \
1212 return _Expr<_Closure, _Rt>(_Closure(__v, __w)); \
1215 template<typename _Tp> \
1216 inline _Expr<_BinClos<_Name, _ValArray,_Constant, _Tp, _Tp>, \
1217 typename __fun<_Name, _Tp>::result_type> \
1218 operator _Op(const valarray<_Tp>& __v, \
1219 const typename valarray<_Tp>::value_type& __t) \
1221 typedef _BinClos<_Name, _ValArray, _Constant, _Tp, _Tp> _Closure; \
1222 typedef typename __fun<_Name, _Tp>::result_type _Rt; \
1223 return _Expr<_Closure, _Rt>(_Closure(__v, __t)); \
1226 template<typename _Tp> \
1227 inline _Expr<_BinClos<_Name, _Constant, _ValArray, _Tp, _Tp>, \
1228 typename __fun<_Name, _Tp>::result_type> \
1229 operator _Op(const typename valarray<_Tp>::value_type& __t, \
1230 const valarray<_Tp>& __v) \
1232 typedef _BinClos<_Name, _Constant, _ValArray, _Tp, _Tp> _Closure; \
1233 typedef typename __fun<_Name, _Tp>::result_type _Rt; \
1234 return _Expr<_Closure, _Rt>(_Closure(__t, __v)); \
1237_DEFINE_BINARY_OPERATOR(+, __plus)
1238_DEFINE_BINARY_OPERATOR(-, __minus)
1239_DEFINE_BINARY_OPERATOR(*, __multiplies)
1240_DEFINE_BINARY_OPERATOR(/, __divides)
1241_DEFINE_BINARY_OPERATOR(%, __modulus)
1242_DEFINE_BINARY_OPERATOR(^, __bitwise_xor)
1243_DEFINE_BINARY_OPERATOR(&, __bitwise_and)
1244_DEFINE_BINARY_OPERATOR(|, __bitwise_or)
1245_DEFINE_BINARY_OPERATOR(<<, __shift_left)
1246_DEFINE_BINARY_OPERATOR(>>, __shift_right)
1247_DEFINE_BINARY_OPERATOR(&&, __logical_and)
1248_DEFINE_BINARY_OPERATOR(||, __logical_or)
1249_DEFINE_BINARY_OPERATOR(==, __equal_to)
1250_DEFINE_BINARY_OPERATOR(!=, __not_equal_to)
1251_DEFINE_BINARY_OPERATOR(<, __less)
1252_DEFINE_BINARY_OPERATOR(>, __greater)
1253_DEFINE_BINARY_OPERATOR(<=, __less_equal)
1254_DEFINE_BINARY_OPERATOR(>=, __greater_equal)
1256#undef _DEFINE_BINARY_OPERATOR
1259#if (__cplusplus >= 201103L) && (__glibcxx_valarray < 202511L)
1279 begin(
const valarray<_Tp>& __va)
noexcept
1292 if (
auto __n = __va.size())
1308 if (
auto __n = __va.size())
1317_GLIBCXX_END_NAMESPACE_VERSION
constexpr _Tp * __addressof(_Tp &__r) noexcept
Same as C++11 std::addressof.
size_t size() const
Return the number of elements in array.
_Tp min() const
Return the minimum element using operator<().
_Tp max() const
Return the maximum element using operator<().
valarray< _Tp > cshift(int __n) const
Return a rotated array.
void swap(valarray< _Tp > &__v) noexcept
Swap.
_Tp & operator[](size_t __i) noexcept
void resize(size_t __size, _Tp __c=_Tp())
Resize array.
_Tp sum() const
Return the sum of all elements in the array.
valarray() noexcept
Construct an empty array.
valarray< _Tp > shift(int __n) const
Return a shifted array.
_Expr< _ValFunClos< _ValArray, _Tp >, _Tp > apply(_Tp __func(_Tp)) const
Apply a function to the array.
valarray< _Tp > & operator=(const valarray< _Tp > &__v)
Assign elements to an array.
ISO C++ entities toplevel namespace is std.
constexpr auto end(_Container &__cont) noexcept(noexcept(__cont.end())) -> decltype(__cont.end())
Return an iterator pointing to one past the last element of the container.
constexpr auto size(const _Container &__cont) noexcept(noexcept(__cont.size())) -> decltype(__cont.size())
Return the size of a container.
constexpr auto begin(_Container &__cont) noexcept(noexcept(__cont.begin())) -> decltype(__cont.begin())
Return an iterator pointing to the first element of the container.
Implementation details not part of the namespace std interface.
Smart array designed to support numeric processing.
valarray< _Tp > & operator^=(const _Tp &)
Set each element e of array to e ^ t.
valarray< _Tp > & operator/=(const _Tp &)
Divide each element of array by t.
valarray(const _Tp *__restrict__, size_t)
Construct an array initialized to the first n elements of t.
valarray< _Tp > & operator|=(const valarray< _Tp > &)
Logical or corresponding elements of v with elements of array.
_UnaryOp< __unary_plus >::_Rt operator+() const
Return a new valarray by applying unary + to each element.
valarray< _Tp > & operator*=(const _Tp &)
Multiply each element of array by t.
_UnaryOp< __logical_not >::_Rt operator!() const
Return a new valarray by applying unary ! to each element.
iterator begin() noexcept
Return an iterator pointing to the first element of the valarray.
iterator end() noexcept
Return an iterator pointing to one past the last element of the valarray.
valarray< _Tp > & operator<<=(const _Tp &)
Left shift each element e of array by t bits.
valarray< _Tp > & operator/=(const valarray< _Tp > &)
Divide elements of array by corresponding elements of v.
valarray< _Tp > & operator-=(const _Tp &)
Subtract t to each element of array.
_UnaryOp< __bitwise_not >::_Rt operator~() const
Return a new valarray by applying unary ~ to each element.
valarray< _Tp > & operator>>=(const _Tp &)
Right shift each element e of array by t bits.
valarray< _Tp > & operator-=(const valarray< _Tp > &)
Subtract corresponding elements of v from elements of array.
valarray< _Tp > & operator%=(const _Tp &)
Set each element e of array to e % t.
valarray< _Tp > & operator+=(const _Tp &)
Add t to each element of array.
valarray< _Tp > & operator>>=(const valarray< _Tp > &)
Right shift elements of array by corresponding elements of v.
valarray< _Tp > & operator+=(const valarray< _Tp > &)
Add corresponding elements of v to elements of array.
valarray< _Tp > & operator^=(const valarray< _Tp > &)
Logical xor corresponding elements of v with elements of array.
valarray< _Tp > & operator&=(const valarray< _Tp > &)
Logical and corresponding elements of v with elements of array.
valarray< _Tp > & operator*=(const valarray< _Tp > &)
Multiply elements of array by corresponding elements of v.
_UnaryOp< __negate >::_Rt operator-() const
Return a new valarray by applying unary - to each element.
valarray< _Tp > & operator%=(const valarray< _Tp > &)
Modulo elements of array by corresponding elements of v.
valarray< _Tp > & operator&=(const _Tp &)
Set each element e of array to e & t.
valarray< _Tp > & operator|=(const _Tp &)
Set each element e of array to e | t.
Reference to one-dimensional subset of an array.
Reference to multi-dimensional subset of an array.
Reference to selected subset of an array.
Reference to arbitrary subset of an array.
Class defining multi-dimensional subset of an array.
Class defining one-dimensional subset of an array.