diff --git a/README.md b/README.md index f536447..aa59877 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,4 @@ # vector Linear space element representation +[![Build status](https://ci.appveyor.com/api/projects/status/d135pixygbgk9bkb/branch/Anton222?svg=true)](https://ci.appveyor.com/project/Engage222/vector-pnd4g/branch/Anton222) +[![Build Status](https://travis-ci.org/Engage222/vector.svg?branch=Anton222)](https://travis-ci.org/Engage222/vector) \ No newline at end of file diff --git a/src/vector.cpp b/src/vector.cpp new file mode 100644 index 0000000..f69e9f9 --- /dev/null +++ b/src/vector.cpp @@ -0,0 +1,109 @@ +#include +#include "vector.h" +#include + +Vector::Vector() { + for(unsigned long i = 0; i < n; i++) { + coords_[i] = 0; + } +} + +Vector::Vector(double a) { + for(unsigned long i = 0; i < n; i++) { + coords_[i] = a; + } +} + +Vector::Vector(const Vector &B) { + for(unsigned long i = 0; i < n; i++) { + coords_[i] = B.coords_[i]; + } +} + +Vector &Vector::operator=(const Vector &B) { + for(unsigned long i = 0; i < n; i++) { + coords_[i] = B.coords_[i]; + } + return *this; +} + +double Vector::operator[](unsigned long i) const { + return coords_[i]; +} + +double &Vector::operator[](unsigned long i) { + return coords_[i]; +} + +Vector &Vector::operator+=(const Vector &B) { + for(unsigned long i = 0; i < n; i++) { + coords_[i] += B.coords_[i]; + } + return *this; +} + +Vector &Vector::operator-=(const Vector &B) { + for(unsigned long i = 0; i < n; i++) { + coords_[i] -= B.coords_[i]; + } + return *this; +} + +Vector &Vector::operator*=(double B) { + for(unsigned long i = 0; i < n; i++) { + coords_[i] *= B; + } + return *this; +} + +Vector &Vector::operator/=(double B) { + for(unsigned long i = 0; i < n; i++) { + coords_[i] /= B; + } + return *this; +} + +bool operator==(const Vector &left, const Vector &right) { + for(unsigned long i = 0; i < Vector::n; i++) { + if (left.coords_[i] != right.coords_[i]) { + return false; + } + } + return true; +} + +Vector operator+(const Vector &left, const Vector &right) { + return Vector(left) += right; +} + +Vector operator-(const Vector &left, const Vector &right) { + return Vector(left) -= right; +} + +Vector operator*(const Vector &left, double A) { + return Vector(left) *= A; +} + +Vector operator*(double A, const Vector &right) { + return right * A; +} + +Vector operator/(const Vector &left, double A) { + return Vector(left) /= A; +} + +double operator^(const Vector &left, const Vector &right) { + double dot = 0; + for(unsigned long i = 0; i < Vector::n; i++) { + dot += left.coords_[i]*right.coords_[i]; + } + return dot; +} + +Vector Vector::operator-() const { + return Vector(*this) *= -1; +} + +bool operator!=(const Vector &left, const Vector &right) { + return !(left == right); +}