仿照vector手动实现myvector,实现容器扩容
#include <iostream>
using namespace std;
template <typename T>
class Myvector
{
private:
T *pt;//申请空间
T num;//初始化的类型
int capacity;//容器申请真实的大小
int size;//容器存放数据真是的长度
public:
//无参构造
Myvector():pt(nullptr),num(0),size(0)
{
}
Myvector(T p, int n):pt(new T[p]),num(n)
{
int i = 0;{}
//有参构造
for(i = 0; i < p; i++)
{
this->pt[i] = num;
}
capacity = p;
size = p;
}
//申请大小不初始化数值
Myvector(T p):pt(new T[p])
{
capacity = p;
size = 0;
}
//析构函数
~Myvector()
{
delete []pt;
}
//拷贝函数
Myvector(const Myvector &other):pt(new T[other.pt]),num(other.num)
{
if(this != &other)
{
int i = 0;
for(i = 0; i < size; i++)
{
this->pt[i] = other.pt[i];
}
}
}
//计算容器的大小
int my_capacity()
{
return capacity;
}
//计算容器存放数据真实长度
int my_size()
{
return size;
}
//添加元素
void push_back(T num)
{
int i = 0;
if(pt == nullptr)
{
pt = new T(num);
capacity = 1;
size = 1;
}
else
{
if( size == capacity)
{
T *newptr = new T[capacity*2];
for(i = 0; i <= capacity; i++)
{
newptr[i] = this->pt[i];
}
delete[] pt;//将容器扩容
pt = newptr;
capacity = capacity*2;
// cout<<"扩容成功"<<endl;
}
pt[size++] = num;
}
}
//判空
bool empty()
{
if(size == 0)
{
return true;
}
return false;
}
//返回最后一个元素
T back()
{
if(empty() == true)
{
throw(1);
}
return pt[size-1];
}
//返回第一个元素
T front()
{
if(empty() == true)
{
throw(1);
}
return pt[0];
}
//遍历元素
void show()
{
int i = 0;
for(i = 0; i < size; i++)
{
cout<<pt[i]<<"\t";
}
cout<<endl;
}
//删除元素
void clear()
{
if(empty() == true)
{
throw(1);
}
int i = 0;
for(i = size-1; i >= 0; i--)
{
size--;
}
}
//返回指定位置的引用
void at(int pos)
{
if(pos < 0 && pos >= size)
{
throw (1);
}
return pt[pos];
};
int main()
{
Myvector<int> V(2,12);
V.push_back(10);
V.push_back(20);
V.push_back(50);
V.show();
int a = V.my_capacity();
// V.assign(1,3);
//V.show();
cout<<a<<endl;
cout<<V.my_size()<<endl;
cout<<V.back()<<endl;
// V.clear();
//V.show();
return 0;
}