my_vectoers.h:
#ifndef MY_VECTORS_H
#define MY_VECTORS_H
#include
using namespace std;
template
class my_vectors
{
private:
TYPE* ptr;
int num;
int cnum;
TYPE* start_ptr=NULL;
TYPE* end_ptr=NULL;
public:
//无参构造
my_vectors(){};
//有参构造
my_vectors(int num,const TYPE &val1);
//拷贝构造
my_vectors(const my_vectors &L);
//拷贝构造2
my_vectors(TYPE* start,TYPE* end);
//=运算符重载
bool operator=(const my_vectors &L);
//>运算符重载
bool operator>(const my_vectors &L);
//[]运算符重载
TYPE & operator[](int index);
//assign函数1
void assign(TYPE* start,TYPE* end);
//assign函数2
void assign( int num, const TYPE &val2 );
//at函数
TYPE at( int pos );
//back函数
TYPE back();
//伪begin函数
TYPE* begin();
//capacity 函数
int capacity();
//clear 函数
void clear();
//empty 函数
bool empty();
//full 函数
bool full();
//伪end函数
TYPE* end();
//front函数
TYPE front();
//insert函数1
TYPE* insert( int loc, const TYPE &val );
//insert函数2
void insert( int loc, int num, const TYPE &val );
//insert函数3
void insert( int loc, TYPE* start, TYPE* end );
//max_size 函数
int max_size();
//pop_back函数
void pop_back();
//push_back 函数
void push_back( const TYPE &val );
//伪rbegin 函数
TYPE* rbegin();
//伪rend 函数
TYPE* rend();
//resize 函数
void resize( int size, TYPE val );
//size 函数
int size();
//swap 函数
void swap( my_vectors &from );
//三杯水
void swap(TYPE &a,TYPE &b);
};
#endif // MY_VECTORS_H
my_vector.cpp:
#include "my_vectors.h"
//有参构造
template
my_vectors::my_vectors(int num,const TYPE &val1)
{
this->num=num;
cnum=num;
ptr=new TYPE(num);
for(int i=0;i
my_vectors::my_vectors(const my_vectors &L)
{
this->num=L.num;
cnum=num;
ptr=new TYPE(L.num);
memcpy(this,&L);
start_ptr=ptr;
end_ptr=ptr+num-1;
}
//拷贝构造2
template
my_vectors::my_vectors(TYPE* start,TYPE* end)
{
num=(end-start)/sizeof(TYPE);
cnum=num;
ptr=new TYPE(num);
memcpy(ptr,start,sizeof(TYPE)*num);
start_ptr=ptr;
end_ptr=ptr+num-1;
}
//=运算符重载
template
bool my_vectors::operator=(const my_vectors &L)
{
if(num == L.num && memcmp(ptr,L.ptr,sizeof(num)) == 0)
{
return true;
}
return false;
}
//>运算符重载
template
bool my_vectors::operator>(const my_vectors &L)
{
if(num > L.num)
{
return true;
}else if(num == L.num && memcmp(ptr,L.ptr,sizeof(num)) > 0)
{
return true;
}else{
return false;
}
}
//[]运算符重载
template
TYPE &my_vectors::operator[](int index)
{
return *(ptr+index);
}
//assign函数1
template
void my_vectors::assign(TYPE* start,TYPE* end)
{
delete []ptr;
num=(end-start)/sizeof(TYPE);
cnum=num;
ptr=new TYPE(num);
memcpy(ptr,start,sizeof(TYPE)*num);
start_ptr=ptr;
end_ptr=ptr+num-1;
}
//assign函数2
template
void my_vectors::assign( int num, const TYPE &val2 )
{
delete []ptr;
this->num=num;
cnum=num;
ptr=new TYPE(num);
for(int i=0;i
TYPE my_vectors::at( int pos )
{
return ptr[pos];
}
//back函数
template
TYPE my_vectors::back()
{
return end_ptr;
}
//伪begin函数
template
TYPE* my_vectors::begin()
{
return start_ptr;
}
//capacity 函数
template
int my_vectors::capacity()
{
return cnum;
}
//clear 函数
template
void my_vectors::clear()
{
while(!empty())
{
pop_back();
}
}
//empty 函数
template
bool my_vectors::empty()
{
return start_ptr==end_ptr==NULL;
}
//full 函数
template
bool my_vectors::full()
{
return ((end_ptr-start_ptr)/sizeof(TYPE))==num;
}
//伪end函数
template
TYPE* my_vectors::end()
{
return end_ptr;
}
//front函数
template
TYPE my_vectors::front()
{
return &ptr[0];
}
//insert函数1
template
TYPE* my_vectors::insert( int loc, const TYPE &val )
{
if(full())
{
cnum*=2;
TYPE s[num];
memcpy(s,this,sizeof(TYPE)*num);
delete []ptr;
ptr=new TYPE(cnum);
memcpy(ptr,s,sizeof(TYPE)*num);
}
for(int i=ptr+num+1;i>=ptr+loc-1;i--)
{
*(ptr+i)=*(ptr+i-1);
}
*(ptr+loc-1)=val;
num++;
return ptr+loc-1;
}
//insert函数2
template
void my_vectors::insert( int loc, int num, const TYPE &val )
{
if(full())
{
while(cnumnum+num)
{
cnum*=2;
}
TYPE s[num];
memcpy(s,this,sizeof(TYPE)*num);
delete []ptr;
ptr=new TYPE(cnum);
memcpy(ptr,s,sizeof(TYPE)*num);
}
for(int i=loc-1;i
void my_vectors::insert( int loc, TYPE* start, TYPE* end )
{
int size=(end-start)/sizeof(TYPE);
if(full())
{
while(cnumnum+size)
{
cnum*=2;
}
TYPE s[num];
memcpy(s,this,sizeof(TYPE)*num);
delete []ptr;
ptr=new TYPE(cnum);
memcpy(ptr,s,sizeof(TYPE)*num);
}
TYPE s1[num];
memcpy(s1,ptr+loc-1,sizeof(TYPE)*(num-loc));
memcpy(ptr+loc-1,start,sizeof(TYPE)*size);
memcpy(ptr+loc-1+size,s1,sizeof(TYPE)*(num-loc));
num++;
}
//max_size 函数
template
int my_vectors::max_size()
{
return cnum;
}
//pop_back函数
template
void my_vectors::pop_back()
{
*end_ptr=ptr[num-1];
num--;
}
//push_back 函数
template
void my_vectors::push_back( const TYPE &val )
{
if(full())
{
cnum*=2;
TYPE s[num];
memcpy(s,this,sizeof(TYPE)*num);
delete []ptr;
ptr=new TYPE(cnum);
memcpy(ptr,s,sizeof(TYPE)*num);
}
*(ptr+num)=val;
}
//伪rbegin 函数
template
TYPE* my_vectors::rbegin()
{
return end_ptr;
}
//伪rend 函数
template
TYPE* my_vectors::rend()
{
return start_ptr;
}
//resize 函数
template
void my_vectors::resize( int size, TYPE val )
{
delete[] ptr;
ptr=new TYPE(size);
num=size;
cnum=size;
for(int i=0;i
int my_vectors::size()
{
return num;
}
//swap 函数
template
void my_vectors::swap( my_vectors &from )
{
swap(this->ptr,from.ptr);
swap(this->num,from.num);
swap(this->cnum,from.cnum);
swap(this->start_ptr,from.start_ptr);
swap(this->end_ptr,from.end_ptr);
}
//三杯水
template
void my_vectors::swap(TYPE &a,TYPE &b)
{
TYPE temp;
temp=a;
a=b;
b=temp;
}
思维导图:有道云笔记