仿照vector手动实现自己的myVector,最主要实现二倍扩容功能
#include <iostream>
using namespace std;
template <typename T>
class Myvector
{
private:
T *start;//起始指针
T *end;//数组末尾指针
T *last;//数组有效长度的尾指针
public:
//定义无参构造
Myvector(){
start=new T[2];
last=start;
end=start+1;
}
//定义有参构造
Myvector(int num,const T &val)
{
start=new T[num+1];
last=start;
end=start+num;
for(int i=0;i<num;++i)
{
start[i]=val;
last++;
}
}
//定义拷贝构造函数
Myvector(const Myvector<T> *other)
{
this->start=new T[other->end -other->first+1];
this->last=other->last;
this->end=other->end;
for(int i=0;i<other->end-other->start;++i)
{
this->first[i]=other->first[i];
}
}
//定义拷贝赋值函数
Myvector &operator=(const Myvector<T>*other){
if(this!=other)
{
delete []start;
this->first=new T[other->end-other->start+1];
this->last=other->last;
this->end=other->end;
for(int i=0;i<other->end-other->start;i++)
{
this->start[i]=other->start[i];
}
}
return *this;
}
//析构函数
~Myvector()
{
delete []start;
start=nullptr;
last=nullptr;
end=nullptr;
}
//at()函数
T &at(int pos){
if(pos>end-start)
{
cout<<"越界了"<<endl;
}
return start[pos];
}
//判空
bool empty(){
if(last==start)
{
return 1;
}else{return 0;}
}
//front()函数
T &front(){
return *start;
}
//back()函数
T &back(){
return *(end-1);
}
//size()函数
int size()
{
return last-start;
}
//二倍扩容
void erkr(){
if(end-start==1||last==start)
{
int len=end-start;
start=new T[len*2];
}
last+=(end-start)-1;
return;
}
//push_back()
void push_back(const T &val)
{
if(last==end)//容器满了
{
erkr();
}
*last=val;
last++;
}
//pop_back()
void pop_back()//容器是空的
{
if(empty())
{
cout<<"容器空了"<<endl;
}
last--;
}
//begin()返回第一个元素的迭代器
T*begin()const{
return start;
}
//end()
T*pend(){
return last;
}
};
int main()
{
Myvector<int>m(2,5);
cout<<m.at(1)<<endl;
cout<<m.size()<<endl;//大小
m.push_back(6);
cout<<m.size()<<endl;//大小
Myvector<int>n(m);
n.pop_back();
cout<<m.at(1)<<endl;
return 0;
}
思维导图文章来源:https://www.toymoban.com/news/detail-712591.html
文章来源地址https://www.toymoban.com/news/detail-712591.html
到了这里,关于c++day7的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!