diff --git a/README.md b/README.md index f536447..6009c39 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,4 @@ # vector Linear space element representation +[![Build Status](https://travis-ci.org/Demitriy/vector.svg)](https://travis-ci.org/Demitriy/vector) +[![Build status](https://ci.appveyor.com/api/projects/status/tvujfqa7o74n1w8c?svg=true)](https://ci.appveyor.com/project/Demitriy/vector) diff --git a/src/vector.cpp b/src/vector.cpp new file mode 100644 index 0000000..f0eb587 --- /dev/null +++ b/src/vector.cpp @@ -0,0 +1,110 @@ +#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); +} +