求优化
  • 板块学术版
  • 楼主BGM114514
  • 当前回复8
  • 已保存回复8
  • 发布时间2023/11/10 18:20
  • 上次更新2023/11/10 20:35:06
查看原帖
求优化
705058
BGM114514楼主2023/11/10 18:20

RT,本以为能与STL的vector<>一较高下,结果输惨了

#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

求大佬优化,玄关

2023/11/10 18:20
加载中...