亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? stl_valarray.h

?? 粗慥集成算法集合 ,并有詳細的文檔資料和測試數據處
?? H
?? 第 1 頁 / 共 4 頁
字號:
/*
 * Copyright (c) 1999
 * Silicon Graphics Computer Systems, Inc.
 *
 * Copyright (c) 1999 
 * Boris Fomitchev
 *
 * This material is provided "as is", with absolutely no warranty expressed
 * or implied. Any use is at your own risk.
 *
 * Permission to use or copy this software for any purpose is hereby granted 
 * without fee, provided the above notices are retained on all copies.
 * Permission to modify the code and to distribute modified code is granted,
 * provided the above notices are retained, and a notice that the code was
 * modified is included with the above copyright notice.
 *
 */ 

#ifndef __SGI_STL_VALARRAY_H
#define __SGI_STL_VALARRAY_H

#ifndef __STLPORT_CMATH
#include <cmath>
#endif
#ifndef __STLPORT_NEW
#include <new>
#endif
#ifndef __SGI_STL_INTERNAL_ALGO_H
#include <stl_algo.h>
#endif
#ifndef __SGI_STL_INTERNAL_NUMERIC_H
#include <stl_numeric.h>
#endif
#ifndef __STLPORT_LIMITS_H
#include <stl_limits.h>
#endif


__STL_BEGIN_NAMESPACE

class slice;
class gslice;

template <class _Tp> class valarray;
template <class _Tp> class slice_array;
template <class _Tp> class gslice_array;
template <class _Tp> class mask_array;
template <class _Tp> class indirect_array;

//----------------------------------------------------------------------
// class valarray

// Base class to handle memory allocation and deallocation.  We can't just
// use vector<>, because vector<bool> would be unsuitable as an internal 
// representation for valarray<bool>.

template <class _Tp> 
struct _Valarray_base
{
  _Tp*   _M_first;
  size_t _M_size;

  _Valarray_base() : _M_first(0), _M_size(0) {}
  _Valarray_base(size_t __n) : _M_first(0), _M_size(0) { _M_allocate(__n); }
  ~_Valarray_base() { _M_deallocate(); }

  void _M_allocate(size_t __n) {
    if (__n != 0) {
      _M_first = static_cast<_Tp*>(malloc(__n * sizeof(_Tp)));
      _M_size  = __n;
#   if !defined(__STL_NO_BAD_ALLOC) && defined(__STL_USE_EXCEPTIONS)
      if (_M_first == 0) {
        _M_size = 0;
        throw __STLPORT_STD::bad_alloc();
      }
#   endif
    }
    else {
      _M_first = 0;
      _M_size = 0;
    }
  }

  void _M_deallocate() {
    free(_M_first);
    _M_first = 0;
    _M_size = 0;
  }
};

template <class _Tp> 
class valarray : private _Valarray_base<_Tp>
{
  friend class gslice;

public:
  typedef _Tp value_type;

  // Basic constructors
  valarray() : _Valarray_base<_Tp>() {}
  valarray(size_t __n) : _Valarray_base<_Tp>(__n)
    { uninitialized_fill_n(this->_M_first, this->_M_size, value_type()); }
  valarray(const value_type& __x, size_t __n) : _Valarray_base<_Tp>(__n)
    { uninitialized_fill_n(this->_M_first, this->_M_size, __x); }
  valarray(const value_type* __p, size_t __n) : _Valarray_base<_Tp>(__n)
    { uninitialized_copy(__p, __p + __n, this->_M_first); } 
  valarray(const valarray<_Tp>& __x) : _Valarray_base<_Tp>(__x._M_size) {
    uninitialized_copy(__x._M_first, __x._M_first + __x._M_size,
                       this->_M_first);
  }

  // Constructors from auxiliary array types
  valarray(const slice_array<_Tp>&);
  valarray(const gslice_array<_Tp>&);
  valarray(const mask_array<_Tp>&);
  valarray(const indirect_array<_Tp>&);

  // Destructor
  ~valarray() { destroy(this->_M_first, this->_M_first + this->_M_size); }

  // Extension: constructor that doesn't initialize valarray elements to a
  // specific value.  This is faster for types such as int and double.
private:
  void _M_initialize(__true_type) {}
  void _M_initialize(__false_type)
    { uninitialized_fill_n(this->_M_first, this->_M_size, value_type()); }

public:
  struct _NoInit {};
  valarray(size_t __n, _NoInit) : _Valarray_base<_Tp>(__n) {
    typedef typename __type_traits<_Tp>::has_trivial_default_constructor
            _Is_Trivial;
    _M_initialize(_Is_Trivial());
  }

public:                         // Assignment
  // Basic assignment.  Note that 'x = y' is undefined if x.size() != y.size()
  valarray<_Tp>& operator=(const valarray<_Tp>& __x) {
    if (this != &__x)
      copy(__x._M_first, __x._M_first + __x._M_size, this->_M_first);
    return *this;
  }

  // Scalar assignment
  valarray<_Tp>& operator=(const value_type& __x) {
    fill_n(this->_M_first, this->_M_size, __x);
    return *this;
  }

  // Assignment of auxiliary array types
  valarray<_Tp>& operator=(const slice_array<_Tp>&);
  valarray<_Tp>& operator=(const gslice_array<_Tp>&);
  valarray<_Tp>& operator=(const mask_array<_Tp>&);
  valarray<_Tp>& operator=(const indirect_array<_Tp>&);

public:                         // Element access
  value_type  operator[](size_t __n) const { return this->_M_first[__n]; }
  value_type& operator[](size_t __n)       { return this->_M_first[__n]; }
  size_t size() const { return this->_M_size; }

public:                         // Subsetting operations with auxiliary type
  valarray<_Tp>            operator[](slice) const;
  slice_array<_Tp>    operator[](slice);
  valarray<_Tp>            operator[](gslice) const;
  gslice_array<_Tp>   operator[](gslice);  
  valarray<_Tp>            operator[](const valarray<bool>&) const;
  mask_array<_Tp>     operator[](const valarray<bool>&);
  valarray<_Tp>            operator[](const valarray<size_t>&) const;
  indirect_array<_Tp> operator[](const valarray<size_t>&);
  
public:                         // Unary operators.
  valarray<_Tp> operator+() const { return *this; }

  valarray<_Tp> operator-() const {
    valarray<_Tp> __tmp(this->size(), _NoInit());
    for (size_t __i = 0; __i < this->size(); ++__i)
      __tmp[__i] = -(*this)[__i];
    return __tmp;
  }
  
  valarray<_Tp> operator~() const {
    valarray<_Tp> __tmp(this->size(), _NoInit());
    for (size_t __i = 0; __i < this->size(); ++__i)
      __tmp[__i] = ~(*this)[__i];
    return __tmp;
  }

  valarray<bool> operator!() const {
    valarray<bool> __tmp(this->size(), valarray<bool>::_NoInit());
    for (size_t __i = 0; __i < this->size(); ++__i)
      __tmp[__i] = !(*this)[__i];
    return __tmp;
  }

public:                         // Scalar computed assignment.
  valarray<_Tp>& operator*= (const value_type& __x) {
    for (size_t __i = 0; __i < this->size(); ++__i)
      (*this)[__i] *= __x;
    return *this;
  }
    
  valarray<_Tp>& operator/= (const value_type& __x) {
    for (size_t __i = 0; __i < this->size(); ++__i)
      (*this)[__i] /= __x;
    return *this;
  }

  valarray<_Tp>& operator%= (const value_type& __x) {
    for (size_t __i = 0; __i < this->size(); ++__i)
      (*this)[__i] %= __x;
    return *this;
  }

  valarray<_Tp>& operator+= (const value_type& __x) {
    for (size_t __i = 0; __i < this->size(); ++__i)
      (*this)[__i] += __x;
    return *this;
  }

  valarray<_Tp>& operator-= (const value_type& __x) {
    for (size_t __i = 0; __i < this->size(); ++__i)
      (*this)[__i] -= __x;
    return *this;
  }

  valarray<_Tp>& operator^= (const value_type& __x) {
    for (size_t __i = 0; __i < this->size(); ++__i)
      (*this)[__i] ^= __x;
    return *this;
  }

  valarray<_Tp>& operator&= (const value_type& __x) {
    for (size_t __i = 0; __i < this->size(); ++__i)
      (*this)[__i] &= __x;
    return *this;
  }

  valarray<_Tp>& operator|= (const value_type& __x) {
    for (size_t __i = 0; __i < this->size(); ++__i)
      (*this)[__i] |= __x;
    return *this;
  }

  valarray<_Tp>& operator<<= (const value_type& __x) {
    for (size_t __i = 0; __i < this->size(); ++__i)
      (*this)[__i] <<= __x;
    return *this;
  }

  valarray<_Tp>& operator>>= (const value_type& __x) {
    for (size_t __i = 0; __i < this->size(); ++__i)
      (*this)[__i] >>= __x;
    return *this;
  }

public:                         // Array computed assignment.
  valarray<_Tp>& operator*= (const valarray<_Tp>& __x) {
    for (size_t __i = 0; __i < this->size(); ++__i)
      (*this)[__i] *= __x[__i];
    return *this;
  }
    
  valarray<_Tp>& operator/= (const valarray<_Tp>& __x) {
    for (size_t __i = 0; __i < this->size(); ++__i)
      (*this)[__i] /= __x[__i];
    return *this;
  }

  valarray<_Tp>& operator%= (const valarray<_Tp>& __x) {
    for (size_t __i = 0; __i < this->size(); ++__i)
      (*this)[__i] %= __x[__i];
    return *this;
  }

  valarray<_Tp>& operator+= (const valarray<_Tp>& __x) {
    for (size_t __i = 0; __i < this->size(); ++__i)
      (*this)[__i] += __x[__i];
    return *this;
  }

  valarray<_Tp>& operator-= (const valarray<_Tp>& __x) {
    for (size_t __i = 0; __i < this->size(); ++__i)
      (*this)[__i] -= __x[__i];
    return *this;
  }

  valarray<_Tp>& operator^= (const valarray<_Tp>& __x) {
    for (size_t __i = 0; __i < this->size(); ++__i)
      (*this)[__i] ^= __x[__i];
    return *this;
  }

  valarray<_Tp>& operator&= (const valarray<_Tp>& __x) {
    for (size_t __i = 0; __i < this->size(); ++__i)
      (*this)[__i] &= __x[__i];
    return *this;
  }

  valarray<_Tp>& operator|= (const valarray<_Tp>& __x) {
    for (size_t __i = 0; __i < this->size(); ++__i)
      (*this)[__i] |= __x[__i];
    return *this;
  }

  valarray<_Tp>& operator<<= (const valarray<_Tp>& __x) {
    for (size_t __i = 0; __i < this->size(); ++__i)
      (*this)[__i] <<= __x[__i];
    return *this;
  }

  valarray<_Tp>& operator>>= (const valarray<_Tp>& __x) {
    for (size_t __i = 0; __i < this->size(); ++__i)
      (*this)[__i] >>= __x[__i];
    return *this;
  }

public:                         // Other member functions.

  // The result is undefined for zero-length arrays
  value_type sum() const {
    return accumulate(this->_M_first + 1, this->_M_first + this->_M_size,
                      (*this)[0]);
  }

  // The result is undefined for zero-length arrays
  value_type min() const {
    return *min_element(this->_M_first + 0, this->_M_first + this->_M_size);
  }

  value_type max() const {
    return *max_element(this->_M_first + 0, this->_M_first + this->_M_size);
  }

  valarray<_Tp> shift(int __n) const;
  valarray<_Tp> cshift(int __n) const;

  valarray<_Tp> apply(value_type __f(value_type)) const {
    valarray<_Tp> __tmp(this->size());
    transform(this->_M_first, this->_M_first + this->_M_size, __tmp._M_first,
              __f);
    return __tmp;
  }
  valarray<_Tp> apply(value_type __f(const value_type&)) const {
    valarray<_Tp> __tmp(this->size());
    transform(this->_M_first, this->_M_first + this->_M_size, __tmp._M_first,
              __f);
    return __tmp;
  }
  
  void resize(size_t __n, value_type __x = value_type()) {
    destroy(this->_M_first, this->_M_first + this->_M_size);
    this->_Valarray_base<_Tp>::_M_deallocate();
    this->_Valarray_base<_Tp>::_M_allocate(__n);
    uninitialized_fill_n(this->_M_first, this->_M_size, __x);
  }
};

//----------------------------------------------------------------------
// valarray non-member functions.

// Binary arithmetic operations between two arrays.  Behavior is
// undefined if the two arrays do not have the same length.

template <class _Tp> 
inline valarray<_Tp> operator*(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] = __x[__i] * __y[__i];
  return __tmp;
}

template <class _Tp> 
inline valarray<_Tp> operator/(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] = __x[__i] / __y[__i];
  return __tmp;
}

template <class _Tp> 
inline valarray<_Tp> operator%(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] = __x[__i] % __y[__i];
  return __tmp;
}

template <class _Tp> 
inline valarray<_Tp> operator+(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] = __x[__i] + __y[__i];
  return __tmp;
}

template <class _Tp> 
inline valarray<_Tp> operator-(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] = __x[__i] - __y[__i];
  return __tmp;
}

template <class _Tp> 
inline valarray<_Tp> operator^(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] = __x[__i] ^ __y[__i];
  return __tmp;
}

template <class _Tp> 
inline valarray<_Tp> operator&(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] = __x[__i] & __y[__i];
  return __tmp;
}

template <class _Tp> 

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
午夜精品久久久久久久久久 | 色婷婷av一区二区三区大白胸| 蜜桃精品视频在线| 免费一区二区视频| 美日韩黄色大片| 精品亚洲porn| 国产成人一区二区精品非洲| 激情欧美一区二区三区在线观看| 国产一区二区三区在线观看精品| 国产成人综合视频| 成人深夜福利app| 色婷婷精品大在线视频| 在线观看免费亚洲| 日韩一区二区三区视频| 中文字幕欧美日韩一区| 亚洲蜜臀av乱码久久精品| 亚洲二区在线视频| 国内精品久久久久影院一蜜桃| 国产成人av影院| 色综合咪咪久久| 欧美日韩精品一二三区| 久久久久久影视| 亚洲精品成人天堂一二三| 秋霞午夜av一区二区三区| 国产乱人伦精品一区二区在线观看| 国产精品99久| 欧美日韩免费电影| 久久久久久日产精品| 一区二区三区日韩精品| 韩国女主播成人在线| 色狠狠色狠狠综合| 亚洲精品在线电影| 亚洲精品国产成人久久av盗摄| 奇米影视一区二区三区| 成人久久视频在线观看| 日韩一区二区三区观看| 有码一区二区三区| 另类的小说在线视频另类成人小视频在线 | 欧美国产一区二区| 午夜欧美大尺度福利影院在线看| 国产成人一区在线| 欧美一区二区精品久久911| 国产精品毛片高清在线完整版| 天天综合网 天天综合色| 国产成人在线观看免费网站| 欧美妇女性影城| 亚洲视频一区二区免费在线观看| 看国产成人h片视频| 一本一道综合狠狠老| 精品国产污污免费网站入口 | 欧美日韩专区在线| 国产日韩精品久久久| 日本vs亚洲vs韩国一区三区二区| 96av麻豆蜜桃一区二区| 欧美激情中文不卡| 激情小说亚洲一区| 日韩欧美激情四射| 日韩中文欧美在线| 91福利在线导航| 国产精品传媒视频| 成人午夜大片免费观看| 精品国产91久久久久久久妲己| 亚洲一区二区三区在线看| 99久久精品国产毛片| 国产午夜精品理论片a级大结局| 日本va欧美va精品发布| 正在播放一区二区| 亚洲国产欧美另类丝袜| 欧美在线你懂的| 亚洲精品成人在线| 欧美亚洲一区三区| 亚洲综合一区二区三区| 色综合一区二区三区| 亚洲欧洲av一区二区三区久久| 国产成人精品1024| 国产精品美女一区二区三区| 福利视频网站一区二区三区| 国产日韩视频一区二区三区| 成人一区在线观看| 国产精品国产三级国产aⅴ无密码 国产精品国产三级国产aⅴ原创 | 色老汉一区二区三区| 亚洲男同性视频| 欧美视频在线一区二区三区| 亚洲国产人成综合网站| 91精品国产高清一区二区三区蜜臀| 三级精品在线观看| 精品伦理精品一区| 成人看片黄a免费看在线| 日韩美女久久久| 在线观看欧美黄色| 日欧美一区二区| 久久综合久久综合九色| 成人毛片视频在线观看| 亚洲国产美国国产综合一区二区 | 国产综合久久久久影院| 国产精品伦一区| 在线精品视频一区二区三四 | 久久久国际精品| 成人福利视频网站| 亚洲午夜日本在线观看| 久久综合99re88久久爱| 91麻豆自制传媒国产之光| 亚洲小说春色综合另类电影| 精品美女在线播放| 91免费在线看| 美腿丝袜亚洲一区| 亚洲色图制服诱惑| 精品欧美黑人一区二区三区| 91小视频免费看| 美女视频一区在线观看| 欧美韩国一区二区| 欧美日韩中文国产| 成人一级片网址| 日韩1区2区3区| 亚洲欧美一区二区视频| 日韩欧美亚洲国产另类| 91麻豆免费观看| 国产精品911| 免费成人美女在线观看| 亚洲另类春色国产| 国产人成一区二区三区影院| 欧美日韩卡一卡二| 99热99精品| 九九视频精品免费| 亚洲国产精品欧美一二99| 国产精品沙发午睡系列990531| 日韩三级在线免费观看| 91精品福利视频| 国产jizzjizz一区二区| 麻豆精品蜜桃视频网站| 亚洲国产日日夜夜| 一区二区在线看| 中文一区在线播放| 久久综合成人精品亚洲另类欧美 | 亚洲国产一区视频| 亚洲欧洲精品一区二区三区不卡| 欧美成人一区二区三区在线观看| 欧美日韩中文字幕一区| 色偷偷一区二区三区| 99久久精品免费看国产免费软件| 国产精品夜夜嗨| 国产一区在线视频| 国产中文字幕一区| 国产一区在线精品| 国产精品影视在线| 国产伦精品一区二区三区视频青涩| 强制捆绑调教一区二区| 日韩精品色哟哟| 日韩和欧美的一区| 日韩国产欧美在线观看| 视频一区欧美精品| 麻豆国产精品官网| 国产综合久久久久影院| 国产一区在线观看视频| 国产伦精品一区二区三区视频青涩| 国内精品写真在线观看| 国产成人免费视频精品含羞草妖精| 蜜桃av一区二区在线观看| 日韩国产欧美在线观看| 久久99国产精品久久99果冻传媒| 青青草国产精品亚洲专区无| 裸体在线国模精品偷拍| 国产精品一区二区久激情瑜伽| 国产一区在线观看麻豆| www.亚洲精品| 色综合天天综合网天天狠天天| 色菇凉天天综合网| 欧美日韩国产欧美日美国产精品| 日韩一区二区免费在线观看| 精品久久久久久久久久久久久久久久久 | 亚洲小说春色综合另类电影| 亚洲成人手机在线| 免费成人美女在线观看.| 国产黄人亚洲片| 在线观看不卡一区| 日韩一级二级三级精品视频| 久久精品一区八戒影视| 一区二区三区在线不卡| 美日韩黄色大片| 99精品视频在线免费观看| 91精品国产乱码| 中文欧美字幕免费| 亚洲在线视频网站| 国产福利一区在线| 欧美在线不卡一区| 国产蜜臀av在线一区二区三区| 亚洲图片欧美综合| 国产福利一区二区三区在线视频| 欧美色图在线观看| 久久久国产午夜精品| 香蕉av福利精品导航| 懂色av一区二区三区免费看| 欧美日韩的一区二区| 国产精品国模大尺度视频| 免费av网站大全久久| 91在线码无精品| 国产日产欧产精品推荐色| 亚洲成人黄色影院| 91日韩在线专区| 国产欧美一区视频|