#include <iostream>
#define MAX 40
using namespace std;
template<typename T>
class MyVector
{
private:
T *data;
int len;
int csize;
public:
//无参构造
MyVector():len(0),csize(0)
{
data=new T[len];
}
//有参构造
MyVector(int l,T d)
{
data=new T[l];
for(int i=0;i<l;i++)
{
data[i]=d;
}
csize=l;
}
//析构函数
~MyVector()
{
delete []data;
cout<<"析构函数"<<endl;
}
//求MyVector容器的大小
int capacity()
{
return csize;
}
//添加元素
void push_back(T d)
{
if(csize==0)
{
csize=1;
data=new T[csize];
}
if(len==csize&&csize!=0)
{
T *ndata=NULL;
csize=csize*2;
ndata=new T[len];
memcpy(ndata,data,sizeof(T)*len);
delete []data;
data=new T[csize];
memcpy(data,ndata,sizeof(T)*len);
}
data[len]=d;
len=len+1;
}
//求容器的真实大小
int size()
{
return len;
}
//给容器中的元素赋值
void assign(int n,T d)
{
if(data!=NULL)
{
delete []data;
}
if(n<csize)
{
data=new T[csize];
for(int i=0;i<n;i++)
{
data[i]=d;
}
len=n;
}
else
{
data=new T[n];
for(int i=0;i<n;i++)
{
data[i]=d;
}
len=n;
csize=n;
}
}
//访问容器中的元素
T &at(int pos)
{
return data[pos];
}
//判空函数
bool empty()
{
return len==0;
}
//清空容器中的元素
void clear()
{
len=0;
}
//返回起始位置的引用
T &front()
{
if(empty())
{
return;
}
else
{
return data[0];
}
}
//返回最后一个位置的引用
T &back()
{
if(empty())
{
return;
}
else
{
return data[len-1];
}
}
//移除最后一个元素
int pop_back()
{
if(empty())
{
cout<<"无元素,移除失败"<<endl;
return 0;
}
len=len-1;
return 1;
}
//返回起始元素的迭代器
T *begin()
{
T *p=&data[0];
return p;
}
//返回末尾元素下一个位置的迭代器
T *end()
{
T *p=&data[len];
return p;
}
};
int main()
{
MyVector<int> m1;
MyVector<int> m2(5,6);
m2.push_back(9);
m2.push_back(5);
m2.push_back(2);
m2.push_back(7);
cout<<m2.capacity()<<endl;
cout<<m2.size()<<endl;
m1.assign(6,3);
m2.clear();
return 0;
}
C++-day7作业
最新推荐文章于 2024-11-09 20:38:27 发布