Merge vectors

main
Micke Nordin 2 years ago
commit 0fd9da4637
Signed by: micke
GPG Key ID: 014B273D614BE877

@ -0,0 +1,27 @@
#include "vector.hpp"
#include <iostream>
using namespace std;
int main() {
vector v = vector(3);
cnumber one(1,0);
cnumber two(2,0);
cnumber three(3,0);
cnumber four(4,0);
cnumber five(5,0);
cnumber i(0,1);
v[0] = one;
v[1] = two;
v[2] = i;
vector w = vector(3);
w[0] = three;
w[1] = four;
w[2] = five;
cout << "v:" << endl;
cout << v << endl;
cout << "w:" << endl;
cout << w << endl;
cout << "v * w:" << endl;
cout << v * w << endl;
return 0;
}

@ -0,0 +1,102 @@
#pragma once
#include "../complex-numbers/cnumber.hpp"
#include <iostream>
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;
}
const cnumber operator*(const vector &v) const {
cnumber res(0,0);
for (long long i = 0; i < this->get_dimention(); i++) {
res = res + this->get_entry(i) * v.get_entry(i);
}
return res;
}
};
Loading…
Cancel
Save