?? stl_valarray.h
字號:
return __tmp;
}
template <class _Tp>
inline valarray<bool> operator||(const _Tp& __c, const valarray<_Tp>& __x)
{
valarray<bool> __tmp(__x.size(), valarray<bool>::_NoInit());
for (size_t __i = 0; __i < __x.size(); ++__i)
__tmp[__i] = __c || __x[__i];
return __tmp;
}
// valarray "transcendentals" (the list includes abs and sqrt, which,
// of course, are not transcendental).
# ifdef __STL_SAME_FUNCTION_NAME_RESOLUTION_BUG
// this proxy is needed for some compilers to resolve problems
// calling sqrt() from within sqrt(), etc.
template <class _Tp>
struct _STL_math_proxy {
static inline _Tp _do_abs(const _Tp& __x) { return abs(__x); }
static inline _Tp _do_acos(const _Tp& __x) { return acos(__x); }
static inline _Tp _do_asin(const _Tp& __x) { return asin(__x); }
static inline _Tp _do_atan(const _Tp& __x) { return atan(__x); }
static inline _Tp _do_atan2(const _Tp& __x, const _Tp& __y) { return atan2(__x, __y); }
static inline _Tp _do_cos(const _Tp& __x) { return cos(__x); }
static inline _Tp _do_cosh(const _Tp& __x) { return cosh(__x); }
static inline _Tp _do_log(const _Tp& __x) { return log(__x); }
static inline _Tp _do_log10(const _Tp& __x) { return log10(__x); }
static inline _Tp _do_pow(const _Tp& __x, const _Tp& __y) { return pow(__x, __y); }
static inline _Tp _do_sin(const _Tp& __x) { return sin(__x); }
static inline _Tp _do_sinh(const _Tp& __x) { return sinh(__x); }
static inline _Tp _do_sqrt(const _Tp& __x) { return sqrt(__x); }
static inline _Tp _do_tan(const _Tp& __x) { return tan(__x); }
static inline _Tp _do_tanh(const _Tp& __x) { return tanh(__x); }
};
# define __STL_DO_ABS _STL_math_proxy<_Tp>::_do_abs
# define __STL_DO_ACOS _STL_math_proxy<_Tp>::_do_acos
# define __STL_DO_ASIN _STL_math_proxy<_Tp>::_do_asin
# define __STL_DO_ATAN _STL_math_proxy<_Tp>::_do_atan
# define __STL_DO_ATAN2 _STL_math_proxy<_Tp>::_do_atan2
# define __STL_DO_COS _STL_math_proxy<_Tp>::_do_cos
# define __STL_DO_COSH _STL_math_proxy<_Tp>::_do_cosh
# define __STL_DO_LOG _STL_math_proxy<_Tp>::_do_log
# define __STL_DO_LOG10 _STL_math_proxy<_Tp>::_do_log10
# define __STL_DO_POW _STL_math_proxy<_Tp>::_do_pow
# define __STL_DO_SIN _STL_math_proxy<_Tp>::_do_sin
# define __STL_DO_SINH _STL_math_proxy<_Tp>::_do_sinh
# define __STL_DO_SQRT _STL_math_proxy<_Tp>::_do_sqrt
# define __STL_DO_TAN _STL_math_proxy<_Tp>::_do_tan
# define __STL_DO_TANH _STL_math_proxy<_Tp>::_do_tanh
# else
# define __STL_DO_ABS abs
# define __STL_DO_ACOS acos
# define __STL_DO_ASIN asin
# define __STL_DO_ATAN atan
# define __STL_DO_ATAN2 atan2
# define __STL_DO_COS cos
# define __STL_DO_COSH cosh
# define __STL_DO_LOG log
# define __STL_DO_LOG10 log10
# define __STL_DO_POW pow
# define __STL_DO_SIN sin
# define __STL_DO_SINH sinh
# define __STL_DO_SQRT sqrt
# define __STL_DO_TAN tan
# define __STL_DO_TANH tanh
# endif
template <class _Tp>
inline valarray<_Tp> abs(const valarray<_Tp>& __x) {
typedef typename valarray<_Tp>::_NoInit _NoInit;
valarray<_Tp> __tmp(__x.size(), _NoInit());
for (size_t __i = 0; __i < __x.size(); ++__i)
__tmp[__i] = __STL_DO_ABS(__x[__i]);
return __tmp;
}
template <class _Tp>
inline valarray<_Tp> acos(const valarray<_Tp>& __x) {
typedef typename valarray<_Tp>::_NoInit _NoInit;
valarray<_Tp> __tmp(__x.size(), _NoInit());
for (size_t __i = 0; __i < __x.size(); ++__i)
__tmp[__i] = __STL_DO_ACOS(__x[__i]);
return __tmp;
}
template <class _Tp>
inline valarray<_Tp> asin(const valarray<_Tp>& __x) {
typedef typename valarray<_Tp>::_NoInit _NoInit;
valarray<_Tp> __tmp(__x.size(), _NoInit());
for (size_t __i = 0; __i < __x.size(); ++__i)
__tmp[__i] = __STL_DO_ASIN(__x[__i]);
return __tmp;
}
template <class _Tp>
inline valarray<_Tp> atan(const valarray<_Tp>& __x) {
typedef typename valarray<_Tp>::_NoInit _NoInit;
valarray<_Tp> __tmp(__x.size(), _NoInit());
for (size_t __i = 0; __i < __x.size(); ++__i)
__tmp[__i] = __STL_DO_ATAN(__x[__i]);
return __tmp;
}
template <class _Tp>
inline valarray<_Tp> atan2(const valarray<_Tp>& __x,
const valarray<_Tp>& __y) {
typedef typename valarray<_Tp>::_NoInit _NoInit;
valarray<_Tp> __tmp(__x.size(), _NoInit());
for (size_t __i = 0; __i < __x.size(); ++__i)
__tmp[__i] = __STL_DO_ATAN2(__x[__i], __y[__i]);
return __tmp;
}
template <class _Tp>
inline valarray<_Tp> atan2(const valarray<_Tp>& __x, const _Tp& __c) {
typedef typename valarray<_Tp>::_NoInit _NoInit;
valarray<_Tp> __tmp(__x.size(), _NoInit());
for (size_t __i = 0; __i < __x.size(); ++__i)
__tmp[__i] = __STL_DO_ATAN2(__x[__i], __c);
return __tmp;
}
template <class _Tp>
inline valarray<_Tp> atan2(const _Tp& __c, const valarray<_Tp>& __x) {
typedef typename valarray<_Tp>::_NoInit _NoInit;
valarray<_Tp> __tmp(__x.size(), _NoInit());
for (size_t __i = 0; __i < __x.size(); ++__i)
__tmp[__i] = __STL_DO_ATAN2(__c, __x[__i]);
return __tmp;
}
template <class _Tp>
inline valarray<_Tp> cos(const valarray<_Tp>& __x) {
typedef typename valarray<_Tp>::_NoInit _NoInit;
valarray<_Tp> __tmp(__x.size(), _NoInit());
for (size_t __i = 0; __i < __x.size(); ++__i)
__tmp[__i] = __STL_DO_COS(__x[__i]);
return __tmp;
}
template <class _Tp>
inline valarray<_Tp> cosh(const valarray<_Tp>& __x) {
typedef typename valarray<_Tp>::_NoInit _NoInit;
valarray<_Tp> __tmp(__x.size(), _NoInit());
for (size_t __i = 0; __i < __x.size(); ++__i)
__tmp[__i] = __STL_DO_COSH(__x[__i]);
return __tmp;
}
template <class _Tp>
inline valarray<_Tp> exp(const valarray<_Tp>& __x) {
typedef typename valarray<_Tp>::_NoInit _NoInit;
valarray<_Tp> __tmp(__x.size(), _NoInit());
for (size_t __i = 0; __i < __x.size(); ++__i)
__tmp[__i] = __STL_DO_EXP(__x[__i]);
return __tmp;
}
template <class _Tp>
inline valarray<_Tp> log(const valarray<_Tp>& __x) {
typedef typename valarray<_Tp>::_NoInit _NoInit;
valarray<_Tp> __tmp(__x.size(), _NoInit());
for (size_t __i = 0; __i < __x.size(); ++__i)
__tmp[__i] = __STL_DO_LOG(__x[__i]);
return __tmp;
}
template <class _Tp>
inline valarray<_Tp> log10(const valarray<_Tp>& __x) {
typedef typename valarray<_Tp>::_NoInit _NoInit;
valarray<_Tp> __tmp(__x.size(), _NoInit());
for (size_t __i = 0; __i < __x.size(); ++__i)
__tmp[__i] = __STL_DO_LOG10(__x[__i]);
return __tmp;
}
template <class _Tp>
inline valarray<_Tp> pow(const valarray<_Tp>& __x,
const valarray<_Tp>& __y) {
typedef typename valarray<_Tp>::_NoInit _NoInit;
valarray<_Tp> __tmp(__x.size(), _NoInit());
for (size_t __i = 0; __i < __x.size(); ++__i)
__tmp[__i] = __STL_DO_POW(__x[__i], __y[__i]);
return __tmp;
}
template <class _Tp>
inline valarray<_Tp> pow(const valarray<_Tp>& __x, const _Tp& __c) {
typedef typename valarray<_Tp>::_NoInit _NoInit;
valarray<_Tp> __tmp(__x.size(), _NoInit());
for (size_t __i = 0; __i < __x.size(); ++__i)
__tmp[__i] = __STL_DO_POW(__x[__i], __c);
return __tmp;
}
template <class _Tp>
inline valarray<_Tp> pow(const _Tp& __c, const valarray<_Tp>& __x) {
typedef typename valarray<_Tp>::_NoInit _NoInit;
valarray<_Tp> __tmp(__x.size(), _NoInit());
for (size_t __i = 0; __i < __x.size(); ++__i)
__tmp[__i] = __STL_DO_POW(__c, __x[__i]);
return __tmp;
}
template <class _Tp>
inline valarray<_Tp> sin(const valarray<_Tp>& __x) {
typedef typename valarray<_Tp>::_NoInit _NoInit;
valarray<_Tp> __tmp(__x.size(), _NoInit());
for (size_t __i = 0; __i < __x.size(); ++__i)
__tmp[__i] = __STL_DO_SIN(__x[__i]);
return __tmp;
}
template <class _Tp>
inline valarray<_Tp> sinh(const valarray<_Tp>& __x) {
typedef typename valarray<_Tp>::_NoInit _NoInit;
valarray<_Tp> __tmp(__x.size(), _NoInit());
for (size_t __i = 0; __i < __x.size(); ++__i)
__tmp[__i] = __STL_DO_SINH(__x[__i]);
return __tmp;
}
template <class _Tp>
inline valarray<_Tp> sqrt(const valarray<_Tp>& __x) {
typedef typename valarray<_Tp>::_NoInit _NoInit;
valarray<_Tp> __tmp(__x.size(), _NoInit());
for (size_t __i = 0; __i < __x.size(); ++__i)
__tmp[__i] = __STL_DO_SQRT(__x[__i]);
return __tmp;
}
template <class _Tp>
inline valarray<_Tp> tan(const valarray<_Tp>& __x) {
typedef typename valarray<_Tp>::_NoInit _NoInit;
valarray<_Tp> __tmp(__x.size(), _NoInit());
for (size_t __i = 0; __i < __x.size(); ++__i)
__tmp[__i] = __STL_DO_TAN(__x[__i]);
return __tmp;
}
template <class _Tp>
inline valarray<_Tp> tanh(const valarray<_Tp>& __x) {
typedef typename valarray<_Tp>::_NoInit _NoInit;
valarray<_Tp> __tmp(__x.size(), _NoInit());
for (size_t __i = 0; __i < __x.size(); ++__i)
__tmp[__i] = __STL_DO_TANH(__x[__i]);
return __tmp;
}
//----------------------------------------------------------------------
// slice and slice_array
class slice {
public:
slice() : _M_start(0), _M_length(0), _M_stride(0) {}
slice(size_t __start, size_t __length, size_t __stride)
: _M_start(__start), _M_length(__length), _M_stride(__stride)
{}
__TRIVIAL_DESTRUCTOR(slice)
size_t start() const { return _M_start; }
size_t size() const { return _M_length; }
size_t stride() const { return _M_stride; }
private:
size_t _M_start;
size_t _M_length;
size_t _M_stride;
};
template <class _Tp>
class slice_array {
friend class valarray<_Tp>;
public:
typedef _Tp value_type;
void operator=(const valarray<value_type>& __x) const {
size_t __index = _M_slice.start();
for (size_t __i = 0;
__i < _M_slice.size();
++__i, __index += _M_slice.stride())
_M_array[__index] = __x[__i];
}
void operator*=(const valarray<value_type>& __x) const {
size_t __index = _M_slice.start();
for (size_t __i = 0;
__i < _M_slice.size();
++__i, __index += _M_slice.stride())
_M_array[__index] *= __x[__i];
}
void operator/=(const valarray<value_type>& __x) const {
size_t __index = _M_slice.start();
for (size_t __i = 0;
__i < _M_slice.size();
++__i, __index += _M_slice.stride())
_M_array[__index] /= __x[__i];
}
void operator%=(const valarray<value_type>& __x) const {
size_t __index = _M_slice.start();
for (size_t __i = 0;
__i < _M_slice.size();
++__i, __index += _M_slice.stride())
_M_array[__index] %= __x[__i];
}
void operator+=(const valarray<value_type>& __x) const {
size_t __index = _M_slice.start();
for (size_t __i = 0;
__i < _M_slice.size();
++__i, __index += _M_slice.stride())
_M_array[__index] += __x[__i];
}
void operator-=(const valarray<value_type>& __x) const {
size_t __index = _M_slice.start();
for (size_t __i = 0;
__i < _M_slice.size();
++__i, __index += _M_slice.stride())
_M_array[__index] -= __x[__i];
}
void operator^=(const valarray<value_type>& __x) const {
size_t __index = _M_slice.start();
for (size_t __i = 0;
__i < _M_slice.size();
++__i, __index += _M_slice.stride())
_M_array[__index] ^= __x[__i];
}
void operator&=(const valarray<value_type>& __x) const {
size_t __index = _M_slice.start();
for (size_t __i = 0;
__i < _M_slice.size();
++__i, __index += _M_slice.stride())
_M_array[__index] &= __x[__i];
}
void operator|=(const valarray<value_type>& __x) const {
size_t __index = _M_slice.start();
for (size_t __i = 0;
__i < _M_slice.size();
++__i, __index += _M_slice.stride())
_M_array[__index] |= __x[__i];
}
void operator<<=(const valarray<value_type>& __x) const {
size_t __index = _M_slice.start();
for (size_t __i = 0;
__i < _M_slice.size();
++__i, __index += _M_slice.stride())
_M_array[__index] <<= __x[__i];
}
void operator>>=(const valarray<value_type>& __x) const {
size_t __index = _M_slice.start();
for (size_t __i = 0;
__i < _M_slice.size();
++__i, __index += _M_slice.stride())
_M_array[__index] >>= __x[__i];
}
void operator=(const value_type& __c) const {
size_t __index = _M_slice.start();
for (size_t __i = 0;
__i < _M_slice.size();
++__i, __index += _M_slice.stride())
_M_array[__index] = __c;
}
~slice_array() {}
private:
slice_array(const slice& __slice, valarray<_Tp>& __array)
: _M_slice(__slice), _M_array(__array)
{}
slice _M_slice;
valarray<_Tp>& _M_array;
private: // Disable assignment and default constructor
slice_array();
};
// valarray member functions dealing with slice and slice_array
template <class _Tp>
inline valarray<_Tp>::valarray(const slice_array<_Tp>& __x)
: _Valarray_base<_Tp>(__x._M_slice.size())
{
typedef typename __type_traits<_Tp>::has_trivial_default_constructor
_Is_Trivial;
_M_initialize(_Is_Trivial());
*this = __x;
}
template <class _Tp>
inline slice_array<_Tp> valarray<_Tp>::operator[](slice __slice) {
return slice_array<_Tp>(__slice, *this);
}
//----------------------------------------------------------------------
// gslice and gslice_array
template <class _Size>
struct _Gslice_Iter_tmpl;
class gslice {
friend struct _Gslice_Iter_tmpl<size_t>;
public:
gslice() : _M_start(0), _M_lengths(0), _M_strides(0) {}
gslice(size_t __start,
const valarray<size_t>& __lengths, const valarray<size_t>& __strides)
: _M_start(__start), _M_lengths(__lengths), _M_strides(__strides)
{}
__TRIVIAL_DESTRUCTOR(gslice)
size_t start() const { return _M_start; }
valarray<size_t> size() const { return _M_lengths; }
valarray<size_t> stride() const { return _M_strides; }
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -