⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 valarray

📁 eVC stl 方便大家在evc中使用stl 帮助程序员更方便的编程。
💻
📖 第 1 页 / 共 4 页
字号:
  typedef typename valarray<_Tp>::_NoInit _NoInit;  valarray<_Tp> __tmp(__x.size(), _NoInit());  for (size_t __i = 0; __i < __x.size(); ++__i)    __tmp[__i] = 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] = 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] = 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] = 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] = 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] = 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] = 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] = 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] = 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] = 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] = 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] = 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] = 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] = 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] = 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] = 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] = 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] = tanh(__x[__i]);  return __tmp;}//----------------------------------------------------------------------// slice and slice_arrayclass 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)    {}  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_arraytemplate <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;}// Behavior is undefined if __x and *this have different sizestemplate <class _Tp>valarray<_Tp>& valarray<_Tp>::operator=(const slice_array<_Tp>& __x){  size_t __index = __x._M_slice.start();  for (size_t __i = 0;       __i < __x._M_slice.size();       ++__i, __index += __x._M_slice.stride())    (*this)[__i] = __x._M_array[__index];  return *this;}template <class _Tp>valarray<_Tp> valarray<_Tp>::operator[](slice __slice) const {  valarray<_Tp> __tmp(__slice.size(), _NoInit());  size_t __index = __slice.start();  for (size_t __i = 0;       __i < __slice.size();       ++__i, __index += __slice.stride())    __tmp[__i] = (*this)[__index];  return __tmp;}template <class _Tp>inline slice_array<_Tp> valarray<_Tp>::operator[](slice __slice) {  return slice_array<_Tp>(__slice, *this);}//----------------------------------------------------------------------// gslice and gslice_arraystruct _Gslice_Iter;class gslice {  friend struct _Gslice_Iter;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)    {}  size_t start()            const { return _M_start; }  valarray<size_t> size()   const { return _M_lengths; }  valarray<size_t> stride() const { return _M_strides; }  // Extension: check for an empty gslice.  bool _M_empty() const { return _M_lengths.size() == 0; }  // Extension: number of indices this gslice represents.  (For a degenerate  // gslice, they're not necessarily all distinct.)  size_t _M_size() const {    return !this->_M_empty()      ? accumulate(_M_lengths._M_first + 1,                   _M_lengths._M_first + _M_lengths._M_size,                   _M_lengths[0],                   multiplies<size_t>())      : 0;  }private:  size_t _M_start;  valarray<size_t> _M_lengths;  valarray<size_t> _M_strides;};// This is not an STL iterator.  It is constructed from a gslice, and it// steps through the gslice indices in sequence.  See 23.3.6 of the C++// standard, paragraphs 2-3, for an explanation of the sequence.  At// each step we get two things: the ordinal (i.e. number of steps taken),// and the one-dimensional index.struct _Gslice_Iter {  _Gslice_Iter(const gslice& __gslice)    : _M_step(0), _M_1d_idx(__gslice.start()),      _M_indices(size_t(0), __gslice._M_lengths.size()),      _M_gslice(__gslice)    {}      bool _M_done() const { return _M_indices[0] == _M_gslice._M_lengths[0]; }  bool _M_incr() {    size_t __dim = _M_indices.size() - 1;    ++_M_step;    while (true) {      _M_1d_idx += _M_gslice._M_strides[__dim];      if (++_M_indices[__dim] != _M_gslice._M_lengths[__dim])        return true;      else if (__dim != 0) {        _M_1d_idx -=          _M_gslice._M_strides[__dim] * _M_gslice._M_lengths[__dim];        _M_indices[__dim] = 0;        --__dim;      }      else        return false;    }  }  size_t _M_step;  size_t _M_1d_idx;  valarray<size_t> _M_indices;  const gslice& _M_gslice;};template <class _Tp>class gslice_array {  friend class valarray<_Tp>;public:  typedef _Tp value_type;  void operator= (const valarray<value_type>& __x) const {    if (!_M_gslice._M_empty()) {      _Gslice_Iter __i(_M_gslice);      do _M_array[__i._M_1d_idx] = __x[__i._M_step]; while(__i._M_incr());    }  }  void operator*= (const valarray<value_type>& __x) const {    if (!_M_gslice._M_empty()) {      _Gslice_Iter __i(_M_gslice);      do _M_array[__i._M_1d_idx] *= __x[__i._M_step]; while(__i._M_incr());    }  }  void operator/= (const valarray<value_type>& __x) const {    if (!_M_gslice._M_empty()) {      _Gslice_Iter __i(_M_gslice);      do _M_array[__i._M_1d_idx] /= __x[__i._M_step]; while(__i._M_incr());    }  }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -