38 template <
class numero>
39 class vectorZ :
public std::vector<numero>
42 typedef std::vector<numero> vector_numero;
47 typedef typename std::vector<numero>::size_type size_type;
48 typedef std::list<numero> lst_numero;
50 vectorZ(
void) : vector_numero() {}
51 vectorZ(size_type n,
const numero &value = numero()) : vector_numero(n,value) {}
54 vectorZ(
const size_t &sz,
const numero arr[]) : vector_numero(arr,arr+sz){}
55 template <
class InputIterator>
56 vectorZ(InputIterator b,InputIterator e);
59 vector_numero::operator=(otro);
81 vectorZ::operator =(v1);
86 vectorZ::operator=(v1);
89 void Prod(
const numero &n);
90 void PutSuma(size_type i,
const numero &n)
92 void PutResta(size_type i,
const numero &n)
94 void PutProd(size_type i,
const numero &n)
96 void swap(size_type n1,size_type n2)
97 { std::swap((*
this)[n1],(*
this)[n2]); }
98 long Busca(
const numero &n)
const;
100 bool Nulos(
const numero &tol= numero());
101 void Con(size_type n1,size_type n2,
const numero &n)
103 fill(&(vector_numero::operator [](n1)),&(vector_numero::operator [](n2)),n);
104 vector_numero::operator [](n2)= n;
106 void Con(size_type n1,
const numero &n)
107 { fill(&(vector_numero::operator [](n1)),this->end(),n); }
108 void Con(
const numero &n)
109 { fill(this->begin(),this->end(),n); }
110 numero Sumatorio( size_type i, size_type j)
const 112 {
return accumulate(this->begin()+ i,this->begin() + j,numero()); }
113 numero Productorio(size_type i, size_type j)
const 115 {
return accumulate(this->begin()+ i+1,this->begin() + j,*(this->begin()+i),std::multiplies<numero>()); }
125 typename vectorZ<numero>::size_type mx= std::max(v1.size(),v2.size());
133 typename vectorZ<numero>::size_type mx= std::max(v1.size(),v2.size());
149 {
return ((
const vector_numero &) x == (
const vector_numero &) y); }
153 template <
class numero>
template<
class InputIterator>
155 : vector_numero(b,e) {}
157 template <
class numero>
161 typedef typename lst_numero::const_iterator c_iterator;
162 for(c_iterator i=ln.begin();i!=ln.end();i++)
163 { (*this)[j]= *i; j++; }
166 template <
class numero>
174 template <
class numero>
177 size_type sz= this->size();
178 for(size_type i=0;i<sz;i++)
179 if ((*
this)[i] == n)
return i;
183 template <
class numero>
186 size_type sz= this->size();
187 for(size_type i= 0;i<sz;i++)
188 (*
this)[i] = -(*this)[i];
190 template <
class numero>
193 size_type sz= this->size();
194 for(size_type i= 0;i<sz;i++)
195 if(Abs((*
this)[i])>tol)
return false;
199 template <
class numero>
202 size_type sz= v.size();
203 for(size_type i=0;i<sz;i++) PutSuma(i,v[i]);
206 template <
class numero>
209 size_type sz= v.size();
210 for(size_type i=0;i<sz;i++) PutResta(i,v[i]);
213 template <
class numero>
216 size_type sz= this->size();
217 for(size_type i= 0;i<sz;i++)
221 template <
class numero>
227 for(
size_t i=0;i<j;i++) left[i]= (*
this)[i];
231 template <
class numero>
235 size_type sz= this->size();
237 size_type szr= sz-j-1;
239 for(size_type i=0;i<szr;i++) right[i]= (*
this)[i+j+1];
243 template <
class numero>
250 for(size_type k=0;k<sz;k++) mid[k]= (*
this)[k+i+1];
254 template <
class numero>
257 if (j == 0)
return Right(j);
258 if (j == (this->size() - 1))
return Left(j);
259 return Cat(Left(j),Right(j));
262 template <
class numero>
270 if (j<this->size()) s= Cat(s,Right(j));
274 template <
class numero>
278 unsigned long c= this->size(),sz=v.size();
279 for(
unsigned long i=0;i<sz;i++)
280 if (Busca(v[i]) < 0) c++;
284 template <
class numero>
285 std::ostream &operator << (std::ostream &os,const vectorZ<numero> &n)
288 typedef typename vectorZ<numero>::size_type sz_type;
289 sz_type sz= n.size();
291 for(sz_type i= 1;i<sz;i++) os <<
',' << n[i];
296 template <
class numero>
300 typename vectorZ<numero>::lst_numero ln;
303 if(c !=
'[') is.putback(c);
318 template <
class numero>
321 size_t sz1= v1.size(), sz2= v2.size();
322 size_t szc= sz1 + sz2;
324 typedef typename vectorZ<numero>::size_type sz_type;
325 for(sz_type i=0;i<sz1;i++)
327 for(sz_type i=0;i<sz2;i++)