1、仿照系统的vector,手动实现一个my_vector
#include <iostream>
using namespace std;
template<typename T>
class myvect
{
private:
T* start;//起始指针
T* last;//数组有效长度的尾指针
T* end;//数组末尾的尾指针
public:
myvect(int size=2)//初始化
{
start=new T[size];
last=start;
end=start+size;
}
//析构函数
~myvect()
{
delete []start;
start=last=end=nullptr;
}
//拷贝构造函数
myvect(const myvect& 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())
{
greater();
}
*last=e;
last++;
}
//2倍扩容
void greater()
{
//原来数组的总长度
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()
{
myvect<int> m1;
cout<<"size="<<m1.size()<<endl;
for(int i=0;i<20;i++)
{
m1.push_tail(i+10);
cout<<"size="<<m1.size()<<'\t'<<"len="<<m1.len()<<endl;
}
for(int i=0;i<20;i++)
{
cout<<m1.at(i)<<" ";
}
cout<<endl;
cout << "Hello World!" << endl;
return 0;
}