仿照系统的vector,手动实现一个my_vecto
#include <iostream>
#include<algorithm>
#include<numeric>
using namespace std;
template <typename T>
class my_vector
{
private:
T* data;
size_t my_s;
size_t my_c;
public:
//构造函数
my_vector():data(NULL),my_s(0),my_c(0){}
my_vector(T d,size_t s,size_t c):data(d),my_s(s),my_c(c){}
//析构函数
~my_vector()
{
delete [] data;
data=NULL;
my_s=0;
my_c=0;
}
//拷贝构造
my_vector(const my_vector& vec)
{
my_s=vec.my_s;
my_c=vec.my_c;
data=new T[my_c];
for(int i=0;i<my_s;i++)
{
data[i]=vec.data[i];
}
}
//赋值运算符重载
my_vector& operator=(const my_vector& vec)
{
if(this==&vec)
{
return *this;
}
T* temp = new T[my_c];
for(int i=0;i<vec.my_s;i++)//++i?i++?
{
temp[i]=vec.data[i];
}
delete [] data;
data=temp;
my_s=vec.my_s;
my_c=vec.my_c;
return *this;
}
//[]运算符重载
T& operator[](size_t index)
{
return data[index];
}
//==运算符重载
bool operator==(const my_vector& vec)const
{
if(my_s!=vec.my_s)
{
return false;
}
for(int i=0;i<my_s;i++)
{
if(data[i]!=vec.data[i])
{
return false;
}
}
return true;
}
//尾插
void my_push_back(T val)
{
if(0==my_c)
{
my_c=1;
data=new T[1];
}
else if(my_s+1>my_c)
{
my_c=my_c*2;
T* temp=new T[my_c];
for(int i=0;i<my_s;i++)
{
temp[i]=data[i];
}
delete [] data;
data =temp;
}
data[my_s]=val;
my_s++;
}
//删除
void my_pop_back()
{
my_s--;
}
//大小
size_t my_size()const
{
return my_s;
}
//元素访问
//找到第一个元素
T my_front()const
{
return data[0];
}
//找到最后一个元素
T my_back()const
{
return data[my_s-1];
}
//返回第一个元素的迭代器
T* my_begin()
{
return data;
}
//返回最后一个迭代器
T* my_end()
{
return data+my_s;
}
//清空容器
//判空
bool my_empty()
{
return my_s==0;
}
//容量
int my_capacity()
{
return my_c;
}
//遍历
};
int main()
{
my_vector<int> v1;//无参构造一个vector对象
//判空
if(v1.my_empty())
{
cout<<"empty"<<endl;
}
else
{
cout<<"not empty"<<endl;
}
//大小
cout<<"大小:"<<v1.my_size()<<endl;
//容量
cout<<"容量:"<<v1.my_capacity()<<endl;
//尾插
for(int i=0;i<5;i++)
{
v1.my_push_back(i+5);
}
cout<<v1.my_begin()<<endl;
cout<<v1.my_end()<<endl;
cout<<v1.my_front()<<endl;
cout<<v1.my_back()<<endl;
//大小
cout<<"大小:"<<v1.my_size()<<endl;
//容量
cout<<"容量:"<<v1.my_capacity()<<endl;
v1.my_pop_back();
cout<<v1.my_begin()<<endl;
cout<<v1.my_end()<<endl;
cout<<v1.my_front()<<endl;
cout<<v1.my_back()<<endl;
//大小
cout<<"大小:"<<v1.my_size()<<endl;
//容量
cout<<"容量:"<<v1.my_capacity()<<endl;
cout << "Hello World!" << endl;
return 0;
}