构建myvector函数
要实现的函数: 构造函数 析构函数 拷贝构造 拷贝赋值 at() empty() full() front() back() size() clear() expand() 二倍扩容函数 push_back() pop_back()
#include <iostream>
#include <string>
using namespace std;
template <typename T>
class myvector
{
private:
T *first;
T *last;
T *end;
public:
myvector()
{
first=new T[1];
last=first;
end=first+1;
}; //构造出一个空的容器
myvector(int num); //使用num个val构造出一个容器
myvector(const myvector &from ); //拷贝构造
~myvector(){};
int size()
{
return last-first;
}
T& at(int pos)
{
return *(first+pos);
}
bool empty()
{
return first==last;
}
bool full()
{
return last==end;
}
T& front()
{
return *first;
}
T& back()
{
return *(last-1);
}
void clear()
{
last=first;
end=first;
}
void expand()
{
int size=this->size();
T* new_first=new T[size*2];
memcpy(new_first,first,sizeof(T)*size);
delete[] first;
first=new_first;
last=first+size;
end=first+size*2;
}
void push_back(const T& data)
{
if(last==end)
{
expand();
}
*last=data;
++last;
}
void pop_back()
{
if(last!=first)
{
last--;
}
}
void show()
{
for(auto p=first;p!=last;p++)
{
cout<<*p<<" ";
}
cout<<endl;
}
};
int main()
{
myvector<int>q;
q.push_back(1);
q.push_back(2);
q.push_back(3);
q.push_back(4);
q.push_back(5);
q.push_back(6);
q.push_back(7);
q.pop_back();
q.pop_back();
q.show();
cout<<q.at(4)<<endl;;
if(q.empty()==0)
{
cout<<"为空"<<endl;
}
if(q.full()!=0)
{
cout<<"为满"<<endl;
}
cout<<q.front()<<endl;;
cout<<q.back()<<endl;
cout<<q.size()<<endl;
q.clear();
return 0;
}