实现My_vector
template <typename T>
class Myvector
{ private:
T * first;
T * last;
T * end;
};
要实现的函数:
构造函数
析构函数
拷贝构造
拷贝赋值 at() empty() full() front() back() size() clear() expand() 二倍扩容函数 push_back() pop_back()
代码
#include <iostream>
using namespace std;
template<typename T>
class My_vector
{
private:
T* start;//起始指针
T* last;//数组有效长度的尾指针
T* end;//数组末尾的尾指针
public:
//初始化
My_vector(int size=8)
{
start=new T[size];
last=start;
end=start+size;
}
//析构函数
~My_vector()
{
delete []start;
start=last=end=nullptr;
}
//拷贝构造函数
My_vector(const My_vector& R)
{
//原空间大小
int size=R.last-R.start;
int len=R.end-R.start;
//申请新空间
start=new T[len];
memcpy(start,R.start,sizeof(T)*size);
last=start+size;
end=start+len;
}
//判空
bool empty()
{
return last==start?1:0;
}
//判满
bool full()
{
return end==last?1:0;
}
//数据大小
int size()
{
return last-start;
}
//数组长度
int len()
{
return end-start;
}
//尾部插入数据
void push_tail(const T e)
{
if(full())
{
expand();
}
*last=e;
last++;
}
//2倍扩容
void expand()
{
//原来数组的总长度
int len=end-start;
T *t=new T[len*2];
memcpy(t,start,sizeof(T)*len);
delete []start;
start=t;
last=start+len;
end=start+len*2;
}
//尾部删除数据
void pop_tail()
{
if(empty()==true)
{
cout<<"empty"<<endl;
return ;
}
--last;
}
//at访问成员
T& at(int index)
{
if(index<0||index>size())
{
cout<<"越界访问"<<endl;
}
return start[index];
}
//获取第一个元素
T front()const
{
return *start;
}
};
int main()
{
My_vector<int> m1;
cout<<"size="<<m1.size()<<endl;
for(int i=0;i<20;i++)
{
m1.push_tail(i);
cout<<"size="<<m1.size()<<'\t'<<"len="<<m1.len()<<endl;
}
for(int i=0;i<20;i++)
{
cout<<m1.at(i)<<" ";
}
cout<<endl;
m1.pop_tail();
for(int i=0;i<19;i++)
{
cout<<m1.at(i)<<" ";
}
return 0;
}
执行结果