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

📄 array.h

📁 mean-shift. pointer sample
💻 H
📖 第 1 页 / 共 2 页
字号:
  return storage[offset(v)];}template<typename T,typename A>template<typename Vector_position>typename Array_2D<T,A>::const_referenceArray_2D<T,A>::operator[](const Vector_position& v) const{  return storage[offset(v)];  }template<typename T,typename A> typename Array_2D<T,A>::referenceArray_2D<T,A>::operator()(const size_type x,const size_type y){  return storage[offset(x,y)]; }template<typename T,typename A> typename Array_2D<T,A>::const_referenceArray_2D<T,A>::operator()(const size_type x,const size_type y) const{    return storage[offset(x,y)]; }template<typename T,typename A>template<typename Vector_position>typename Array_2D<T,A>::referenceArray_2D<T,A>::at(const Vector_position& v){  if ((v[0]>=x_dim)||(v[1]>=y_dim)){#ifdef ARRAY_EXCEPTION    if (v[0]>=x_dim) {      throw std::out_of_range("Out of range X");    }    else{      throw std::out_of_range("Out of range Y");    }#else    std::cerr<<"[Array_2D<T,A>::at] Out of range"<<std::endl;    exit(1);#endif  }    return storage[offset(v)];}template<typename T,typename A>template<typename Vector_position>typename Array_2D<T,A>::const_referenceArray_2D<T,A>::at(const Vector_position& v) const{  if ((v[0]>=x_dim)||(v[1]>=y_dim)){#ifdef ARRAY_EXCEPTION    if (v[0]>=x_dim) {      throw std::out_of_range("Out of range X");    }    else{      throw std::out_of_range("Out of range Y");    }#else    std::cerr<<"[Array_2D<T,A>::at] Out of range"<<std::endl;    exit(1);#endif  }      return storage[offset(v)];}template<typename T,typename A> typename Array_2D<T,A>::referenceArray_2D<T,A>::at(const size_type x,const size_type y){  if ((x>=x_dim)||(y>=y_dim)){#ifdef ARRAY_EXCEPTION    if (x>=x_dim) {      throw std::out_of_range("Out of range X");    }    else{      throw std::out_of_range("Out of range Y");    }#else    std::cerr<<"[Array_2D<T,A>::at] Out of range"<<std::endl;    exit(1);#endif  }   return storage[offset(x,y)]; }template<typename T,typename A> typename Array_2D<T,A>::const_referenceArray_2D<T,A>::at(const size_type x,const size_type y) const{  if ((x>=x_dim)||(y>=y_dim)){#ifdef ARRAY_EXCEPTION    if (x>=x_dim) {      throw std::out_of_range("Out of range X");    }    else{      throw std::out_of_range("Out of range Y");    }#else    std::cerr<<"[Array_2D<T,A>::at] Out of range"<<std::endl;    exit(1);#endif  }  return storage[offset(x,y)]; }  template<typename T,typename A> typename Array_2D<T,A>::iteratorArray_2D<T,A>::begin(){  return storage.begin();}template<typename T,typename A> typename Array_2D<T,A>::const_iteratorArray_2D<T,A>::begin() const{  return storage.begin();}template<typename T,typename A> typename Array_2D<T,A>::iteratorArray_2D<T,A>::end(){  return storage.end();}template<typename T,typename A> typename Array_2D<T,A>::const_iteratorArray_2D<T,A>::end() const{  return storage.end();}template<typename T,typename A> typename Array_2D<T,A>::reverse_iteratorArray_2D<T,A>::rbegin(){  return storage.rbegin();}template<typename T,typename A> typename Array_2D<T,A>::const_reverse_iteratorArray_2D<T,A>::rbegin() const{  return storage.rbegin();}template<typename T,typename A> typename Array_2D<T,A>::reverse_iteratorArray_2D<T,A>::rend(){  return storage.rend();}template<typename T,typename A> typename Array_2D<T,A>::const_reverse_iteratorArray_2D<T,A>::rend() const{  return storage.rend();}template<typename T,typename A> template<typename Vector_position>typename Array_2D<T,A>::size_typeArray_2D<T,A>::offset(const Vector_position& v) const{#ifdef CHECK_ARRAY_ACCESS  if ((v[0] >= x_dim) || (v[1] >= y_dim)){    std::cerr<<"Array_2D: Out of range ("<<v[0]<<","<<v[1]<<"), actual size is "<<x_dim<<"x"<<y_dim<<std::endl;  }  exit(1);#endif    return v[0]*y_dim + v[1];}template<typename T,typename A> typename Array_2D<T,A>::size_typeArray_2D<T,A>::offset(const size_type& x,const size_type& y) const{  #ifdef CHECK_ARRAY_ACCESS  if ((x >= x_dim) || (y >= y_dim)){    std::cerr<<"Array_2D: Out of range ("<<x<<","<<y<<"), actual size is "<<x_dim<<"x"<<y_dim<<std::endl;  }  exit(1);#endif      return x*y_dim + y;}#ifndef NO_XMLtemplate<typename T,typename A> QDomElement Array_2D<T,A>::to_DOM_element(const QString& name,					  QDomDocument& document) const{  QDomElement main_element = document.createElement(name);  main_element.setAttribute("width",QString::number(width()));  main_element.setAttribute("height",QString::number(height()));  std::ostringstream out;  for(const_iterator i=begin(),i_end=end();i!=i_end;i++){    out<<(*i)<<' ';  }  main_element.appendChild(document.createTextNode(out.str()));  return main_element;}template<typename T,typename A> void Array_2D<T,A>::from_DOM_element(const QDomElement& element){  QDomElement& elt = const_cast<QDomElement&>(element);  const size_type width  = elt.attributeNode("width").value().toUInt();  const size_type height = elt.attributeNode("height").value().toUInt();  resize(width,height);  std::istringstream in(elt.text());      for(iterator i=begin(),i_end=end();i!=i_end;i++){    in>>(*i);  }}#endif/*  ##################  # class Array_3D #  ################## */template<typename T,typename A>Array_3D<T,A>::Array_3D(const A& a)  :x_dim(0),y_dim(0),z_dim(0),storage(){}template<typename T,typename A>Array_3D<T,A>::Array_3D(const size_type nx,			const size_type ny,			const size_type nz,			const T& val,			const A& a)  :x_dim(nx),y_dim(ny),z_dim(nz),storage(nx*ny*nz,val,a){}/*!  Fills in the array with the elements between \p begin_elt and  \p \e end_elt.  Throw the length_error() exception if not enough elements. */template<typename T,typename A>template<typename Element_iterator>Array_3D<T,A>::Array_3D(Element_iterator begin_elt,			Element_iterator end_elt,			const size_type nx,			const size_type ny,			const size_type nz,			const A& a)  :x_dim(nx),y_dim(ny),z_dim(nz),storage(a){  const size_type s = x_dim*y_dim*z_dim;  storage.reserve(s);    Element_iterator elt;  size_type index;  for(elt=begin_elt,index=0;(elt!=end_elt)&&(index<s);elt++,index++){    storage.push_back(*elt);  }  if (index!=s) {    storage.clear();    storage.reserve(0);#ifdef ARRAY_EXCEPTION    throw std::length_error("Not enough elements to initialize the array");#else    std::cerr<<"[Array_3D<T,A>::Array_3D] Not enough elements to initialize the array"<<std::endl;    exit(1);#endif  }}template<typename T,typename A>Array_3D<T,A>::Array_3D(const Array_3D<T,A>& a)  :x_dim(a.x_dim),y_dim(a.y_dim),z_dim(a.z_dim),storage(a.storage){}template<typename T,typename A>voidArray_3D<T,A>::assign(const size_type nx,		      const size_type ny,		      const size_type nz,		      const T& val){  x_dim = nx;  y_dim = ny;  z_dim = nz;    storage.assign(x_dim*y_dim*z_dim,val);;}template<typename T,typename A>boolArray_3D<T,A>::empty() const{  return storage.empty();}template<typename T,typename A>typename Array_3D<T,A>::size_typeArray_3D<T,A>::x_size() const{  return x_dim;}template<typename T,typename A>typename Array_3D<T,A>::size_typeArray_3D<T,A>::width() const{  return x_dim;}template<typename T,typename A>typename Array_3D<T,A>::size_typeArray_3D<T,A>::y_size() const{  return y_dim;}template<typename T,typename A>typename Array_3D<T,A>::size_typeArray_3D<T,A>::height() const{  return y_dim;}template<typename T,typename A>typename Array_3D<T,A>::size_typeArray_3D<T,A>::z_size() const{  return z_dim;}template<typename T,typename A>typename Array_3D<T,A>::size_typeArray_3D<T,A>::depth() const{  return z_dim;}template<typename T,typename A>typename Array_3D<T,A>::size_typeArray_3D<T,A>::size() const{  return storage.size();}template<typename T,typename A>typename Array_3D<T,A>::size_typeArray_3D<T,A>::max_size() const{  return storage.max_size();}template<typename T,typename A> voidArray_3D<T,A>::resize(const size_type nx,		      const size_type ny,		      const size_type nz){  x_dim = nx;  y_dim = ny;  z_dim = nz;  storage.resize(x_dim * y_dim * z_dim);}template<typename T,typename A> voidArray_3D<T,A>::swap(Array_3D<T,A>& a){  size_type x_buf = x_dim;  size_type y_buf = y_dim;  size_type z_buf = z_dim;    x_dim = a.x_dim;  y_dim = a.y_dim;  z_dim = a.z_dim;  a.x_dim = x_buf;  a.y_dim = y_buf;  a.z_dim = z_buf;  storage.swap(a.storage);}template<typename T,typename A> typename Array_3D<T,A>::allocator_typeArray_3D<T,A>::get_allocator() const{  return storage.get_allocator();}    template<typename T,typename A> Array_3D<T,A>&Array_3D<T,A>::operator=(const Array_3D<T,A>& a){  if (&a!=this){    x_dim   = a.x_dim;    y_dim   = a.y_dim;    z_dim   = a.z_dim;    storage = a.storage;  }  return *this;}template<typename T,typename A> boolArray_3D<T,A>::operator==(const Array_3D<T,A>& a){  return ((x_dim==a.x_dim)	  &&(y_dim==a.y_dim)	  &&(z_dim==a.z_dim)	  &&(storage==a.storage));}template<typename T,typename A> boolArray_3D<T,A>::operator!=(const Array_3D<T,A>& a){  return !(*this==a);}template<typename T,typename A> template<typename Vector_position>typename Array_3D<T,A>::referenceArray_3D<T,A>::operator[](const Vector_position& v){  return storage[offset(v)];}template<typename T,typename A> template<typename Vector_position>typename Array_3D<T,A>::const_referenceArray_3D<T,A>::operator[](const Vector_position& v) const{  return storage[offset(v)];  }template<typename T,typename A> typename Array_3D<T,A>::referenceArray_3D<T,A>::operator()(const size_type x,			  const size_type y,			  const size_type z){    return storage[offset(x,y,z)]; }template<typename T,typename A> typename Array_3D<T,A>::const_referenceArray_3D<T,A>::operator()(const size_type x,			  const size_type y,			  const size_type z) const{    return storage[offset(x,y,z)]; }template<typename T,typename A> template<typename Vector_position>typename Array_3D<T,A>::referenceArray_3D<T,A>::at(const Vector_position& v){  if ((v[0]>=x_dim)||(v[1]>=y_dim)||(v[2]>=z_dim)){#ifdef ARRAY_EXCEPTION    if (v[0]>=x_dim) {      throw std::out_of_range("Out of range X");    }    else if (v[1]>=y_dim) {      throw std::out_of_range("Out of range Y");    }    else {      throw std::out_of_range("Out of range Z");    }#else    std::cerr<<"[Array_3D<T,A>::at] Out of range"<<std::endl;    exit(1);#endif  }    return storage[offset(v)];}template<typename T,typename A> template<typename Vector_position>typename Array_3D<T,A>::const_referenceArray_3D<T,A>::at(const Vector_position& v) const{  if ((v[0]>=x_dim)||(v[1]>=y_dim)||(v[2]>=z_dim)){#ifdef ARRAY_EXCEPTION    if (v[0]>=x_dim) {      throw std::out_of_range("Out of range X");    }    else if (v[1]>=y_dim) {      throw std::out_of_range("Out of range Y");    }    else {      throw std::out_of_range("Out of range Z");    }#else    std::cerr<<"[Array_3D<T,A>::at] Out of range"<<std::endl;    exit(1);#endif  }      return storage[offset(v)];}template<typename T,typename A> typename Array_3D<T,A>::referenceArray_3D<T,A>::at(const size_type x,		  const size_type y,		  const size_type z){  if ((x>=x_dim)||(y>=y_dim)||(z>=z_dim)){#ifdef ARRAY_EXCEPTION    if (x>=x_dim) {      throw std::out_of_range("Out of range X");    }    else if (y>=y_dim) {      throw std::out_of_range("Out of range Y");    }    else {      throw std::out_of_range("Out of range Z");    }#else    std::cerr<<"[Array_3D<T,A>::at] Out of range"<<std::endl;#endif  }   return storage[offset(x,y,z)]; }template<typename T,typename A> typename Array_3D<T,A>::const_referenceArray_3D<T,A>::at(const size_type x,		  const size_type y,		  const size_type z) const{  if ((x>=x_dim)||(y>=y_dim)||(z>=z_dim)){#ifdef ARRAY_EXCEPTION    if (x>=x_dim) {      throw std::out_of_range("Out of range X");    }    else if (y>=y_dim) {      throw std::out_of_range("Out of range Y");    }    else {      throw std::out_of_range("Out of range Z");    }#else    std::cerr<<"[Array_3D<T,A>::at] Out of range"<<std::endl;#endif  }  return storage[offset(x,y,z)]; }  template<typename T,typename A> typename Array_3D<T,A>::iteratorArray_3D<T,A>::begin(){  return storage.begin();}template<typename T,typename A> typename Array_3D<T,A>::const_iteratorArray_3D<T,A>::begin() const{  return storage.begin();}template<typename T,typename A> typename Array_3D<T,A>::iteratorArray_3D<T,A>::end(){  return storage.end();}template<typename T,typename A> typename Array_3D<T,A>::const_iteratorArray_3D<T,A>::end() const{  return storage.end();}template<typename T,typename A> typename Array_3D<T,A>::reverse_iteratorArray_3D<T,A>::rbegin(){  return storage.rbegin();}template<typename T,typename A> typename Array_3D<T,A>::const_reverse_iteratorArray_3D<T,A>::rbegin() const{  return storage.rbegin();}template<typename T,typename A> typename Array_3D<T,A>::reverse_iteratorArray_3D<T,A>::rend(){  return storage.rend();}template<typename T,typename A> typename Array_3D<T,A>::const_reverse_iteratorArray_3D<T,A>::rend() const{  return storage.rend();}template<typename T,typename A> template<typename Vector_position>typename Array_3D<T,A>::size_typeArray_3D<T,A>::offset(const Vector_position& v) const{#ifdef CHECK_ARRAY_ACCESS  if ((v[0] >= x_dim) || (v[1] >= y_dim) || (v[2] >= z_dim)){    std::cerr<<"Array_3D: Out of range ("<<v[0]<<","<<v[1]<<","<<v[2]<<"), actual size is "<<x_dim<<"x"<<y_dim<<"x"<<z_dim<<std::endl;  }#endif  return (v[0]*y_dim + v[1])*z_dim + v[2];}template<typename T,typename A> typename Array_3D<T,A>::size_typeArray_3D<T,A>::offset(const size_type& x,		      const size_type& y,		      const size_type& z) const{#ifdef CHECK_ARRAY_ACCESS  if ((x >= x_dim) || (y >= y_dim) || (z >= z_dim)){    std::cerr<<"Array_3D: Out of range ("<<x<<","<<y<<","<<z<<"), actual size is "<<x_dim<<"x"<<y_dim<<"x"<<z_dim<<std::endl;  }#endif    return (x*y_dim + y)*z_dim + z;}#endif

⌨️ 快捷键说明

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