#ifndef My_vec
#define My_vec 1
#include<new>
#include<stdexcept>
#if __cplusplus >= 201103L
#include<initializer_list>
#endif
template<typename T> class Myvec{
public:
typedef T* iterator;
typedef const T* citerator;
typedef long long size_type;
typedef T value_type;
private:
typedef long long ull;
T *mi,*sto;
ull si,no;
void destr(){
si=si*2+1;
sto=new T[si];
for(int i=0;i<no;i++)sto[i]=mi[i];
delete[] mi;
mi=sto;
sto=0;
}
public:
Myvec():si(500),no(0){
mi=new value_type[500];
}
Myvec(ull s):si(s),no(s){
mi=new value_type[no];
for(T* i=0;i<no;i++)mi[i]=0;
}
Myvec(ull s,value_type v):si(s),no(s){
mi=new value_type[no];
for(T* i=0;i<no;i++)mi[i]=v;
}
Myvec(const Myvec& my){
mi=new T[my.si];
si=my.si;
no=my.size();
for(int i=0;i<no;i++)mi[i]=my[i];
}
#if __cplusplus >= 201103L
Myvec(std::initializer_list<value_type> init){
mi=new value_type[500];si=500;no=0;
citerator beg=init.begin(),en=init.end();
while(beg!=en){
mi[no]=*beg;
beg++;
no++;
}
}
#endif
Myvec operator=(const Myvec& my){
delete[] mi;
mi=new T[my.si];
si=my.si;
no=my.size();
for(int i=0;i<no;i++)mi[i]=my[i];
return *this;
}
~Myvec(){
delete[] mi;
}
size_type size(){
return no;
}
size_type size()const{
return no;
}
iterator push_back(value_type x){
no++;
if(no>=si)destr();
mi[no-1]=x;
return &mi[no-1];
}
value_type operator[](size_type i){
if(i>=no||i<0)throw std::invalid_argument("Invalid range argument!");
return mi[i];
}
value_type operator[](size_type i)const{
if(i>=no||i<0)throw std::invalid_argument("Invalid range argument!");
return mi[i];
}
iterator insert(iterator it,value_type x){
no++;
if(no>=si)destr();
for(iterator i=mi+no-2;i!=it-1;i--){
*(i+1)=*i;
}
*it=x;
return it;
}
iterator insert(size_type s,value_type x){
no++;
if(no>=si)destr();
for(size_type i=no-2;i>=s;i--){
mi[i+1]=mi[i];
}
mi[s]=x;
return mi+s;
}
iterator begin(){
return mi;
}
iterator end(){
return mi+no;
}
citerator cbegin(){
return mi;
}
citerator cend(){
return mi+no;
}
};
#endif
求大佬优化常数,玄关