Welcome, guest! Login / Register - Why register?
Psst.. new poll here.
Psst.. new forums here.
Microsoft is blocking us again (TY IP Reputation!) so just use oauth login instead. :)

Paste

Pasted as C++ by wlan ( 16 years ago )
//                    ‚ҐабЁп 4.0  (25.08.2001)
//                  ** ‹ЁбвЁ­Ј д ©«  "vect.h" **
//               ¤Ё­ ¬ЁзҐбЄЁҐ ¬ ббЁўл vect Ё vector

#ifndef __VECT_H
#define __VECT_H

#ifndef __FSTREAM_H
 #include<fstream.h>
#endif
#ifndef __ASSERT_H
 #include<assert.h>
#endif

template<class T>
class v_obj       // гЄ § вҐ«м ­  ¬ ббЁў
{
public:
 T* p;            // гЄ § вҐ«м ­  ¬ ббЁў T
 int size;        // а §¬Ґа ¬ ббЁў 
 int refCount;    // бзҐвзЁЄ ббл«®Є
 // Є®­бвагЄв®а б гЄ § ­ЁҐ¬ а §¬Ґа  size
 // бзҐвзЁЄ ббл«®Є ¤«п ­®ў®Ј® ®ЎкҐЄв  гбв ­ ў«Ёў Ґвбп ў 1
 v_obj(int a): size(a),refCount(1)
  { p=new T[size]; assert(p); memset(p,0,sizeof(T)*size); }
 ~v_obj() { delete [] p; p=NULL; size=0; }
};

template<class T>
class vect        // Їа®б⥩訩 vect
{
protected:
 v_obj<T>* vp;      // гЄ § вҐ«м ­  ¬ ббЁў
public:
 // Є®­бвагЄв®а б гЄ § ­ЁҐ¬ а §¬Ґа  size
 vect(int a) { vp=new v_obj<T>(a); assert(vp); }
 // Є®­бвагЄв®а Є«®­Ёа®ў ­Ёп
 // бзҐвзЁЄ ббл«®Є ¤«п Є®ЇЁа㥬®Ј® ®ЎкҐЄв  Ї®«гз Ґв ЇаЁа йҐ­ЁҐ ­  1
 vect(const vect& a) { vp=a.vp; vp->refCount++; }
 // ¤ҐбвагЄв®а
 // ¤«п Є«®­  - 㬥­м襭ЁҐ бзҐвзЁЄ  ббл«®Є, ¤«п ®ЎкҐЄв  - г¤ «Ґ­ЁҐ
 ~vect() { if(--vp->refCount==0) delete vp; }
 int up() const { return vp->size-1; } // ўҐае­пп Ја ­Ёж 
 int max() const { return vp->size; }  // а §¬Ґа ¬ ббЁў 
 int len() const { return vp->size; }  // а §¬Ґа ¬ ббЁў 
 // ®ЇҐа в®а ў§пвЁп н«Ґ¬Ґ­в  ¬ ббЁў  б Їа®ўҐаЄ®© Ја ­Ёж
 T& operator[](int i) { assert(i>=0&&i<vp->size); return vp->p[i]; }
 T operator[](int i) const { assert(i>=0&&i<vp->size); return vp->p[i]; }
 vect& operator=(const vect&); // ®ЇҐа в®а ЇаЁбў®Ґ­Ёп
 friend ostream& operator<<(ostream&,const vect&); // ўлў®¤ ­  Ї®в®Є
 void print() { cout<<(*this); } // зв®Ў Ўл«®
};
// ®ЇҐа в®а ЇаЁбў®Ґ­Ёп
template<class T>
vect<T>& vect<T>::operator=(const vect<T>& a)
{
 if(this==&a) return *this; // ЇаЁбў Ёў ­ЁҐ б ¬®¬г ᥡҐ
 int s=vp->size<a.vp->size?vp->size:a.vp->size;
 for(register i=0;i<s;i++) vp->p[i]=a.vp->p[i];
 return *this;
}

template<class T>
ostream& operator<<(ostream& out,const vect<T>& a) // ўлў®¤ ­  Ї®в®Є
{
 for(register i=0;i<a.vp->size;out<<a.vp->p[i++]<<'\t'); out<<endl;
 return out;
}

template<class T>
class vector: public vect<T> // Є« бб vector
{
public:
 vector(int a): vect<T>(a) {} // Є®­бвагЄв®а б гЄ § ­ЁҐ¬ а §¬Ґа  size
 vector(const vector& a): vect<T>(a) {} // Є®­бвагЄв®а Є«®­Ёа®ў ­Ёп
 ~vector() {} // ¤ҐбвагЄв®а
 friend T operator*(const vector&,const vector&); // г¬­®¦Ґ­ЁҐ vector*vector
 friend vector operator*(const vector&,T);        // г¬­®¦Ґ­ЁҐ vector*T
 friend vector operator*(T,const vector&);        // г¬­®¦Ґ­ЁҐ T*vector
 friend vector operator+(const vector&,const vector&); // б«®¦Ґ­ЁҐ vector+vector
 friend vector operator-(const vector&,const vector&); // ўлзЁв ­ЁҐ vector-vector
 vector& operator+=(const vector&);                // б«®¦Ґ­ЁҐ vector+=vector
 vector& operator-=(const vector&);                // ўлзЁв ­ЁҐ vector-=vector
 friend istream& operator>>(istream&,vector&); // з⥭ЁҐ Ё§ Ї®в®Є 
 ostream& write_bin(ostream&); // § ЇЁбм ў ЎЁ­ а­л© д ©«
 istream& read_bin(istream&);  // з⥭ЁҐ Ё§ ЎЁ­ а­®Ј® д ©« 
};

template<class T>
T operator*(const vector<T>& a,const vector<T>& b) // г¬­®¦Ґ­ЁҐ vector*vector
{
 assert(a.vp->size==b.vp->size);
 T ret=0;
 for(register i=0;i<a.vp->size;i++) ret+=a.vp->p[i]*b.vp->p[i];
 return ret;
}

template<class T>
vector<T> operator*(const vector<T>& a,T b) // г¬­®¦Ґ­ЁҐ vector*T
{
 vector<T> ret(a.vp->size);
 for(register i=0;i<a.vp->size;i++) ret.vp->p[i]=a.vp->p[i]*b;
 return ret;
}

template<class T>
vector<T> operator*(T b,const vector<T>& a) // г¬­®¦Ґ­ЁҐ T*vector
{
 vector<T> ret(a.vp->size);
 for(register i=0;i<a.vp->size;i++) ret.vp->p[i]=a.vp->p[i]*b;
 return ret;
}

template<class T>
vector<T> operator+(const vector<T>& a,const vector<T>& b) // б«®¦Ґ­ЁҐ vector+vector
{
 assert(a.vp->size==b.vp->size);
 vector<T> ret(a.vp->size);
 for(register i=0;i<a.vp->size;i++) ret.vp->p[i]=a.vp->p[i]+b.vp->p[i];
 return ret;
}
// ўлзЁв ­ЁҐ vector-vector
template<class T>
vector<T> operator-(const vector<T>& a,const vector<T>& b)
{
 assert(a.vp->size==b.vp->size);
 vector<T> ret(a.vp->size);
 for(register i=0;i<a.vp->size;i++) ret.vp->p[i]=a.vp->p[i]-b.vp->p[i];
 return ret;
}

template<class T>
vector<T>& vector<T>::operator+=(const vector<T>& a) // б«®¦Ґ­ЁҐ vector+=vector
{
 assert(vp->size==a.vp->size);
 for(register i=0;i<vp->size;i++) vp->p[i]+=a.vp->p[i];
 return *this;
}

template<class T>
vector<T>& vector<T>::operator-=(const vector<T>& a) // ўлзЁв ­ЁҐ vector-=vector
{
 assert(vp->size==a.vp->size);
 for(register i=0;i<vp->size;i++) vp->p[i]-=a.vp->p[i];
 return *this;
}

template<class T>
istream& operator>>(istream& in,vector<T>& a) // з⥭ЁҐ Ё§ Ї®в®Є 
{
 for(register i=0;i<a.vp->size;in>>a.vp->p[i++]);
 return in;
}

template<class T>
ostream& vector<T>::write_bin(ostream& out) // § ЇЁбм ў ЎЁ­ а­л© д ©«
{
 int s=sizeof(T);
 for(register i=0;i<vp->size;out.write((char*)&vp;->p[i++],s));
 return out;
}

template<class T>
istream& vector<T>::read_bin(istream& in) // з⥭ЁҐ Ё§ ЎЁ­ а­®Ј® д ©« 
{
 int s=sizeof(T);
 for(register i=0;i<vp->size;in.read((char*)&vp;->p[i++],s));
 return in;
}

//---------------------------------------------------------------------
template<class T> class QUADR;
// § ЇЁбм ў ЎЁ­ а­л© д ©« ¬ ббЁў  QUADR
template<class T>
ofstream& write_quadr(vector<QUADR<T> >& a,ofstream& out)
{
 for(register i=0;i<a.max();a[i++].write_bin(out));
 return out;
};
// з⥭ЁҐ Ё§ ЎЁ­ а­®Ј® д ©«  ¬ ббЁў  QUADR
template<class T>
ifstream& read_quadr(vector<QUADR<T> >& a,ifstream& in)
{
 for(register i=0;i<a.max();a[i++].read_bin(in));
 return in;
};

template<class T> class compl;
// § ЇЁбм ў ЎЁ­ а­л© д ©« ¬ ббЁў  compl
template<class T>
ofstream& write_compl(vector<compl<T> >& a,ofstream& out)
{
 for(register i=0;i<a.max();a[i++].write_bin(out));
 return out;
};
// з⥭ЁҐ Ё§ ЎЁ­ а­®Ј® д ©«  ¬ ббЁў  compl
template<class T>
ifstream& read_compl(vector<compl<T> >& a,ifstream& in)
{
 for(register i=0;i<a.max();a[i++].read_bin(in));
 return in;
};

#endif

 

Revise this Paste

Your Name: Code Language: