20#ifndef _TVECTOR_H_INCLUDED_
21#define _TVECTOR_H_INCLUDED_
25#define ASSERTE _ASSERTE
27#define ASSERTE(expression)
39template <
class T>
class mtr;
79template<
class T>
class vec
96 void resize(
int Size,
int Border=0)
102 m_container=
new T[size+2*m_border];
103 m_data=m_container+m_border;
106 explicit vec(T * Data,
int Size,
int Border=0):m_data(Data),size(Size),m_border(Border),m_container(0)
111 explicit vec(
int Size,
int Border=0)
115 m_container=
new T[size+2*m_border];
116 m_data=m_container+m_border;
121 m_border=vect.m_border;
123 m_container=
new T[size+2*m_border];
124 m_data=m_container+m_border;
125 for (
int idx=0;idx<size;idx++)
126 m_data[idx]=vect.m_data[idx];
143 delete []m_container;
148 ASSERTE(m_container);
150 memset(m_container,0,(size+2*m_border)*
sizeof(T));
152 memset(m_data,0,size*
sizeof(T));
155 vec<T>& InitRamp(T StartValue, T Increment)
157 m_data[0]=StartValue;
158 for(
int i=1; i<size; i++){
159 m_data[i]=m_data[i-1]+Increment;
164 int MaxPos(T& maxval)
168 for(
int i=1; i<size; i++) {
169 if (maxval<m_data[i]){
176 int MinPos(T& minval)
180 for(
int i=1; i<size; i++) {
181 if (minval>m_data[i]){
192 for(
int i=1; i<size; i++) {
195 return double(Res)/size;
202 for(
int i=1; i<size; i++) {
203 max = tCustomMax(max,m_data[i]);
207 vec<T>& operator= (
const T& val)
209 for(
int idx=0;idx<size;idx++)
216 ASSERTE(vect.size==size);
217 for(
int idx=0;idx<size;idx++)
218 m_data[idx]=vect.m_data[idx];
222 inline T* addr(
int idx)
224 ASSERTE(idx>=-m_border);
225 ASSERTE(idx<size+m_border);
229 inline T& operator [] (
size_t idx)
231 ASSERTE(idx>=-m_border);
232 ASSERTE(idx<size+m_border);
233 T* res=(T*)(m_data+idx);
237 vec<T>& operator*= (
const T& val)
239 for(
int idx=0;idx<size;idx++)
244 vec<T> operator* (
const T& val)
const
247 for(
int idx=0;idx<size;idx++)
248 res.m_data[idx]=m_data[idx]*val;
252 T operator* (
const vec<T>& vect)
const
254 ASSERTE(size==vect.size);
256 for (
int idx=0;idx<size;idx++)
257 res+=m_data[idx]*vect.m_data[idx];
263 ASSERTE(size==matr.m_height);
265 for(
int i=0; i<matr.m_width; i++){
266 T sum=matr[0][i]*m_data[0];
267 for(
int j=1; j<matr.m_height; j++){
268 sum+=matr[j][i]*m_data[j];
274 vec<T>& operator+= (
const T &val)
276 for(
int idx=0;idx<size;idx++)
283 ASSERTE (vect.size==size);
284 for(
int idx=0;idx<size;idx++)
285 m_data[idx]+=vect.m_data[idx];
289 vec<T> operator+ (
const T& val)
const
298 ASSERTE (vect.size==size);
304 vec<T>& operator-= (
const T &val)
306 for(
int idx=0;idx<size;idx++)
313 ASSERTE (vect.size==size);
314 for(
int idx=0;idx<size;idx++)
315 m_data[idx]-=vect.m_data[idx];
321 ASSERTE (vect.size==size);
330 for(
int idx=0;idx<size;idx++)
331 res.m_data[idx]=-m_data[idx];
335 vec<T>& operator/=(
const T val)
338 for(
int idx=0;idx<size;idx++)
343 vec<T> operator/ (
const T val)
const
350 vec<T>& operator>>=(
const int shr)
353 if (shr==0)
return(*
this);
354 for(
int idx=0;idx<size;idx++)
359 vec<T> operator>> (
const int shr)
const
367 vec<T>& operator<<=(
const int shl)
370 if (shl==0)
return(*
this);
371 for(
int idx=0;idx<size;idx++)
376 vec<T> operator<< (
const int shl)
const
385 vec<T>& operator&=(
const T& val)
387 for(
int idx=0;idx<size;idx++)
394 for(
int idx=0;idx<size;idx++)
395 m_data[idx]&=vect.m_data[idx];
399 vec<T> operator& (
const T& val)
const
413 vec<T>& operator|=(
const T& val)
415 for(
int idx=0;idx<size;idx++)
422 for(
int idx=0;idx<size;idx++)
423 m_data[idx]|=vect.m_data[idx];
427 vec<T> operator| (
const T& val)
const
441 vec<T>& operator^=(
const T& val)
443 for(
int idx=0;idx<size;idx++)
450 for(
int idx=0;idx<size;idx++)
451 m_data[idx]^=vect.m_data[idx];
455 vec<T> operator^ (
const T& val)
const
471 for(
int i=0;i<size;i++)
476 bool operator== (
const vec<T> &vect)
478 ASSERTE (vect.size==size);
479 for(
int idx=0;idx<size;idx++)
480 if (m_data[idx]!=vect.m_data[idx])
485 bool operator!= (
const vec<T> &vect)
487 ASSERTE (vect.size==size);
488 for(
int idx=0;idx<size;idx++)
489 if (m_data[idx]!=vect.m_data[idx])
521 template<
class T1,
class T2>
void Convert(
vec<T1>& vSrc,
vec<T2>& vDst){
522 ASSERTE(vSrc.size==vDst.size);
523 for(
int i=0; i<vSrc.size; i++){
563 for (
int i=0;i<A.size;i++)
570 for (
int i=0;i<A.size;i ++)
571 Res[i]=(T)sqrt((
double)A[i]);
575template <
class T> T Summ(
vec<T>& A)
578 for (
int i=0;i<A.size;i ++)
583template <
class T>
void Clear(
vec<T>& A)
585 for (
int idx=0;idx<A.size;idx++)