一维数组的简单封装 carray模板。

来源:互联网 发布:西宁网络电视客服电话 编辑:程序博客网 时间:2024/06/10 05:06

#ifndef CARRAY_HEADER
#define CARRAY_HEADER

//这个程序取材于 Bjarne Stroustrup 的《The C++ Programming Language》,后经过加强和改正。
//作者是:Piboye

#include <iterator>
namespace piboye
{
template<typename T,int n>
class carray
{
   char i_data[sizeof(T)*n];
public:
   typedef T value_type;
   typedef value_type * iterator;
   typedef value_type const * const_iterator;
   typedef std::reverse_iterator<iterator> reverse_iterator;
   typedef std::reverse_iterator<const_iterator> const_reverse_iterator;
   typedef value_type & reference;
   typedef value_type const & const_reference;
   typedef value_type * pointer;
   typedef value_type const * const_pointer;
   typedef ptrdiff_t difference_type;
   typedef int size_type;
private:
   const_pointer cast()const {return reinterpret_cast<const_pointer>(i_data);}
   pointer cast() {return reinterpret_cast<pointer>(i_data);}
public:
 //Full Constructor
   carray (value_type const &a_1)  {
       for(int i=0;i<size();++i) {
          new (cast()+i) value_type(a_1);
       } 
   }

   template<typename T1>
   carray (T1 a_iter)  {
       for(int i=0;i<size();++i) {
          new (cast()+i) value_type(*a_iter);
          ++a_iter;
       }
   }

   carray(carray const & a_1) {
       for(int i=0;i<size();++i) {
          new (cast()+i) value_type(a_1[i]);
       }
   }
   carray & operator=(carray const & a_1) {
       for(int i=0;i<size();++i) {
           cast()[i]=a_1[i];
       }
       return *this;
   }
 //Destrcutor
   ~carray() {
       delete [] cast();
   }

    //iterator
   iterator begin() {
      return cast();
   }
   iterator end() {
      return cast()+size();
   }  
   const_iterator begin() const {
      return cast();
   }
   const_iterator end() const {
      return cast()+size();
   }

   //reverse_iterator
   reverse_iterator rbegin() {
      return reverse_iterator (cast()+size());
   }
   reverse_iterator rend() {
      return reverse_iterator(cast());
   }  
   const_reverse_iterator rbegin() const {
      return const_reverse_iterator (cast()+size());
   }
   const_reverse_iterator rend() const {
      return const_reverse_iterator(cast());
   }

   value_type & operator[](int a_index) {
      return cast()[a_index];
   }
   value_type const & operator[](int a_index) const {
      return cast()[a_index];
   }

   size_type size() const {
      return n;
   }
   value_type front() const {
      return cast()[0];
   }
   value_type  back() const {
      return cast()[size()-1];
   }

//Following is unsafted;

//Partition Constructor


}; // class carray ended

} // namespace piboye ended
#endif //CARRAY_HEADER

原创粉丝点击