/* 模板类:动态数组 */
template <class T>
class T_A
{
public:
T_A() : num(1) { arry = new T[1]; }
T_A(size_t n) : num(n)
{
if(n > 0)
arry = new T[n];
else
arry = NULL;
}
~T_A();
void reset_arry_size(const size_t n);
void print_num();
size_t get_size() const { return num; }
void set_value(T n);
void set_value(size_t index, T n);
T get_value(size_t index) const;
private:
size_t num;
T *arry;
};
template <class T>
T_A<T>::~T_A()
{
if(arry)
delete [] arry;
arry = NULL;
}
template <class T>
void T_A<T>::reset_arry_size(const size_t n)
{
T *pTmp = arry;
arry = new T[n];
for(size_t i = 0; i < this->num; i++) //将旧数据拷贝到新内存中
arry[i] = pTmp[i];
delete [] pTmp;
pTmp = NULL;
this->num = n;
}
template <class T>
void T_A<T>::set_value(T n)
{
arry[0] = n;
}
template <class T>
void T_A<T>::set_value(size_t index, T n)
{
if(index < 0) return;
if(index <= this->num - 1){
arry[index] = n;
}
else{
if(this->num - 1 < index){
reset_arry_size(index * 2); //分配2倍大小的内存
}
arry[index] = n;
}
}
template <class T>
T T_A<T>::get_value(size_t index) const
{
if(index < this->num)
{
return arry[index];
}
}
template <class T>
void T_A<T>::print_num()
{
cout << this->num << endl;
}
/********************************************************/
模拟c++容器vector写的动态数组
最新推荐文章于 2024-05-10 12:19:37 发布