#include <iostream>
using namespace std;
template<typename T>
class MyVector
{
private:
T *p; //动态数组的首地址 用来保存数据
int Size; //动态数组的元素个数
int max1size; //动态数组的最大长度
public:
//无参数 - 构造一个空的vector
MyVector():Size(1),p(new T[1]){}
//数量(num)和值(val)
//-构造一个初始放入num个值为val的元素的Vector
MyVector(int num,const T &val):
Size(num),max1size(num),p(new T[num])
{
for(int i=0;i<num;i++)
{
p[i]=val;
}
}
//vector(from) - 构造一个与vector from 相同的vector
MyVector(const MyVector &other):
Size(other.Size),max1size(other.max1size),p(new T[max1size])
{
for(int i=0;i<other.Size;i++)
{
p[i]=other.p[i];
}
}
//析构函数
~MyVector()
{
delete []p;
p=nullptr;
}
//at() 函数 返回当前Vector指定位置loc的元素的引用. at() 函数 比 [] 运算符更加安全, 因为它不会让你去访问到Vector内越界的元素
T& at(int loc) const
{
if(loc<max1size)
{
return p[loc];
}else {
cout<<"下标越界"<<endl;
throw double(1);
}
}
//back() 函数返回当前vector最末一个元素的引用
T& back()
{
return p[Size-1];
}
//capacity() 函数 返回当前vector在重新进行内存分配以前所能容纳的元素数量
size_t capacity()
{
return max_size;
}
//clear()函数删除当前vector中的所有元素.
void clear()
{
delete []p;
Size=0;
cout<<"删除所有元素成功"<<endl;
}
//判空
bool empty()
{
if(Size==0)
{
return true;
}else
{
return false;
}
}
//删除指定位置元素
T erase(size_t loc)
{
for(int i=loc;i<Size-1;i++)
{
p[i]=p[i+1];
}
Size-=1;
return p;
}
//front()函数返回当前vector起始元素的引用
T& front()
{
return p;
}
//max_size() 函数返回当前vector所能容纳元素数量的最大值
size_t max_size()
{
return max1size;
}
//pop_back()函数删除当前vector最末的一个元素
void pop_back()
{
p[Size-1]=0;
Size-=1;
}
//push_back()添加值为val的元素到当前vector末尾
void push_back(const T &val)
{
Size+=1;
if(Size>max1size)
{
max1size=2*max1size;
T *ptr=new T[max1size];
for(int i=0;i<Size;i++)
{
ptr[i]=p[i];
}
delete [] p;
this->p=ptr;
}
p[Size-1]=val;
}
//当前vector的大小为size,且对新创建的元素赋值val
// void resize( size_t size, T val )
// {
// if(size>this->Size)
// {
// }else
// {
// }
// }
void show()
{
for(int i=0;i<Size;i++)
{
cout<<"p["<<i<<"]="<<p[i]<<" ";
}
cout<<endl;
}
};
int main()
{
MyVector <string> v(3,"啦啦啦");
v.show();
cout<<"v.maxsize="<<v.max_size()<<endl;
cout<<"111"<<endl;
v.push_back("新的一天");
cout<<"v.back="<<v.back()<<endl;
v.show();
return 0;
}