diff --git a/vector.cpp b/vector.cpp new file mode 100644 index 0000000..9613f2d --- /dev/null +++ b/vector.cpp @@ -0,0 +1,15 @@ +#include "vector.hpp" +#include +using namespace std; +int main() { + vector v = vector(3); + cnumber one(1,0); + cnumber two(2,0); + cnumber i(0,1); + v[0] = one; + v[1] = two; + v[2] = i; + + cout << v << endl; + return 0; +} diff --git a/vector.hpp b/vector.hpp new file mode 100644 index 0000000..f45bdae --- /dev/null +++ b/vector.hpp @@ -0,0 +1,94 @@ +#include "../complex-numbers/cnumber.hpp" +#include +using namespace std; +class vector { +private: + long long dimention; + cnumber *entries; + +public: + vector(const long long dimention) { + this->dimention = dimention; + this->entries = (cnumber *)calloc(sizeof(cnumber), dimention); + for (long long i = 0; i < dimention; i++) { + this->set_entry(i, cnumber(0, 0)); + } + } + vector(const vector &v) { + this->dimention = v.get_dimention(); + this->entries = (cnumber *)calloc(sizeof(cnumber), v.get_dimention()); + for (long long i = 0; i < v.get_dimention(); i++) { + this->set_entry(i, v.get_entry(i)); + } + } + ~vector() { + this->dimention = 0; + free(this->entries); + this->entries = NULL; + } + long long get_dimention() const { return this->dimention; } + cnumber *get_entries() const { return this->entries; } + cnumber get_entry(const long long index) const { + if (index < this->get_dimention()) { + return this->entries[index]; + } + return cnumber(0,0); + } + void set_entry(const long long index, const cnumber z) { + if (index < this->get_dimention()) { + this->entries[index] = z; + } + } + + const cnumber operator[](const long long index) const { + return this->get_entry(index); + } + + // FIXME: Figure out how to make sure you do not try to access something outside of the index + cnumber &operator[](const long long index) { return this->entries[index]; } + + friend ostream &operator<<(ostream &os, const vector &v) { + for (long long i = 0; i < v.get_dimention(); i++) { + os << "| " << v[i] << " |"; + if (i != v.get_dimention() - 1) + os << endl; + } + return os; + } + void operator=(const vector &v) { + this->dimention = v.get_dimention(); + free(this->entries); + this->entries = (cnumber *)calloc(sizeof(cnumber), dimention); + for (long long i = 0; i < v.get_dimention(); i++) { + this->set_entry(i, v.get_entry(i)); + } + } + const vector operator+(const vector &v) const { + if (this->get_dimention() != v.get_dimention()) { + return vector(0); + } + vector sum = vector(v.get_dimention()); + for (long long i = 0; i < v.get_dimention(); i++) { + sum[i] = this->get_entry(i) + v[i]; + } + return sum; + } + + const vector operator-(const vector &v) const { + if (this->get_dimention() != v.get_dimention()) { + return vector(0); + } + vector sum = vector(v.get_dimention()); + for (long long i = 0; i < v.get_dimention(); i++) { + sum[i] = this->entries[i] - v[i]; + } + return sum; + } + const vector operator*(const cnumber scalar) const { + vector product = vector(this->get_dimention()); + for (long long i = 0; i < this->get_dimention(); i++) { + product[i] = this->entries[i] * scalar; + } + return product; + } +};