Vector::构造,复制构造,析构

时间:2021-05-19 19:30:28

构造函数:

// 构造函数
   Vector(int c = DEFAULT_CAPACITY, int s = 0, T v = 0) //容量为c、规模为s、所有元素初始为v
   { _elem = new T[_capacity = c]; for (_size = 0; _size < s; _elem[_size++] = v); } //s <= c

复制构造函数:

从A数组中为[lo,hi)的左闭右开区间复制数据到vector对象:

template <typename T> //元素类型
void Vector<T>::copyFrom(T const* A, Rank lo, Rank hi) { //以数组区间A[lo, hi)为蓝本复制向量
   _elem = new T[_capacity = 2 * (hi - lo)]; _size = 0; //分配空间,规模清零
   while (lo < hi) //A[lo, hi)内的元素逐一
      _elem[_size++] = A[lo++]; //复制至_elem[0, hi - lo)
}

复制构造函数的几种重载方式:

复制数组A中某一段区间数据到对象

 Vector(T const * A, Rank lo, Rank hi) { copyFrom(A, lo, hi); } //数组区间复制

复制数组A中从0到n的区间数据到对象

   Vector(T const * A, Rank n) { copyFrom(A, 0, n); } //数组整体复制

复制vector中区间为[lo,hi)的数据到Vector对象

   Vector(Vector<T> const & V, Rank lo, Rank hi) { copyFrom(V._elem, lo, hi); } //向量区间复制

赋值vector中从0开始的整片数据

   Vector(Vector<T> const & V) { copyFrom(V._elem, 0, V._size); } //向量整体复制

析构函数

// 析构函数
   ~Vector() { delete [] _elem; } //释放内部空间