/////// File: Vector.C /////// #include #include "Vector.h" Vector::Vector(Dim n, double* arr) : v(new double[n]), len(n) { for(int i = 0; i < n; i++) v[i] = arr[i]; } double Vector::inner(double* w) { double ans = 0; for( int i=0 ; i < len ; i++ ) ans += v[i]*w[i]; return(ans); } Vector::Vector(const Vector& vec) // copy consstructor : v(new double[vec.len]), len(vec.len) { for( int i = 0; i < len; i++ ) v[i] = vec.v[i]; } Vector& Vector::OP = (const Vector& vec) { if( &vec == this ) return(*this); if ( len == 0 && vec.len > 0 ) { len = vec.len; v = new double[len]; } else if ( len != vec.len ) abort(); for( int i = 0; i < len; i++ ) v[i] = vec.v[i]; return(*this); } Vector& Vector::OP += (const Vector& vec) { if ( len != vec.len ) abort(); cout << "member called\n"; for( int i = 0; i < len; i++ ) v[i] += vec.v[i]; return(*this); } Vector& OP += (Vector& v1, const Vector& v2) { if ( v1.len != v2.len ) abort(); cout << "friend called\n"; for( int i = 0; i < v1.len; i++ ) v1.v[i] += v2.v[i]; return(v1); } double& Vector::OP [] (int i) { if (i > 0 && i <= len) return(v[i-1]); else { cerr << "Vector index " << i << " out of bounds\n"; abort(); } } Vector Vector::OP + (const Vector& vec) const { if ( len != vec.len ) abort(); Vector ans(len); for (int i=0; i < len; i++) ans.v[i] = v[i] + vec.v[i]; return(ans); } Vector OP * (const Vector& vec, double s) { Vector ans(vec.len); for (int i=0; i < vec.len; i++) ans.v[i] = s * vec.v[i]; return(ans); } void Vector::display() { double *p = v; int i = len; cout << '('; while ( i-- > 0 ) { cout << *p++; if ( i > 0 ) cout << " "; } cout << ")\n"; } // double arr[] = {1.5, 2.5, 3.5, 4.5}; // double arr1[] = {1.6, 0.6, 3.6, 4.6}; // double arr2[] = {1.7, 2.7, 3.7, 4.7};