Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- using namespace std;
- class Vector
- {
- int size;
- double * values;
- public:
- Vector(int n, double d = 0);
- Vector(const Vector & v);
- ~Vector();
- int getSize() const {return size;};
- double & getVal(int) const;
- double & operator[](int index) const {return getVal(index);};
- Vector & operator=(const Vector &);
- void show() const;
- bool isEmpty() const {return (size==0);};
- void fill(const double & d){for(int i=0; i<size; values[i++]=d);};
- void zeros(){fill(0);};
- void ones(){fill(1);};
- friend Vector operator-(const Vector &);
- friend Vector operator-(const Vector &, const Vector &);
- friend Vector operator-(const Vector &, const double &);
- friend Vector operator-(const double &, const Vector &);
- friend Vector operator+(const Vector &, const Vector &);
- friend Vector operator+(const Vector &, const double &);
- friend Vector operator+(const double &, const Vector &);
- };
- int main()
- {
- Vector a(3, 1), b(5, -1);
- for(int i=1; i<a.getSize(); ++i) a[i]=a[i-1]+2;
- for(int i=1; i<b.getSize(); ++i) b[i]=b[i-1]-1;
- cout << "Vector a = "; a.show();
- cout << "Vector b = "; b.show();
- Vector c = a + b;
- cout << "Vector c = a + b = "; c.show();
- double d = 5;
- c = a + d;
- cout << "Vector c = a + " << d << " = "; c.show();
- c = d + a;
- cout << "Vector c = " << d << " + a = "; c.show();
- c = b - a;
- cout << "Vector c = b - a = "; c.show();
- c = b - d;
- cout << "Vector c = b - " << d << " = "; c.show();
- c = d - b;
- cout << "Vector c = " << d << " - b = "; c.show();
- }
- Vector operator-(const Vector & v)
- // Изменение всех значений вектора на противоположные им
- {
- Vector temp = v;
- for(int i=0; i < temp.size; temp[i]= -temp[i], i++);
- return temp;
- }
- Vector operator-(const Vector & a, const Vector & b)
- // Вычитание из вектора а вектора b как сумма а и (-b)
- {
- return a + (-b);
- }
- Vector operator-(const Vector & a, const double & d)
- // Вычитание из вектора a вещественного числа справа как сумма a + (-d);
- {
- return a + (-d);
- }
- Vector operator-(const double & d, const Vector & a)
- // Вычитание из вектора а вещественного числа слева как сумма d + (-a)
- {
- return d + (-a);
- }
- Vector operator+(const Vector & a, const Vector & b)
- // Сложение двух векторов
- {
- bool aMax = a.size > b.size; // Определяем , имеет ли вектора а большую длину относительно вектора b
- int maxSize = aMax ? a.size:b.size; // Инициализируем длину максимального вектора
- int minSize = !aMax ? a.size:b.size; // Инициализируем длину минимального вектора
- Vector temp(maxSize); // Создаем временный вектор , размер которого равен размеру максимального вектора
- // Пока мы не вышли за пределы векторов a и b , складываем соответствующие значения и записываем в векток temp
- for(int i = 0; i < minSize; temp[i] = a[i] + b[i], i++);
- // Затем мы копируем все значения из большего вектора в temp
- for(int i = minSize; i < maxSize; temp[i] = aMax ? a[i]:b[i], i++);
- // Возвращаем вектор temp
- return temp;
- }
- Vector operator+(const Vector & v, const double & d)
- // Сложение вектора с вещественным числом справа ( прибавление к начальному элементу вектора )
- {
- Vector temp(v); // Создаем временный вектор
- if (!temp.isEmpty()) // Если не пуст
- temp[0] += d; // То прибавляем к соответствующему элементу значение d
- return temp;
- }
- Vector operator+(const double & d, const Vector & v)
- // Сложение вектора с вещественным числом слева ( прибавление к последнему элементу вектора )
- {
- Vector temp(v); // Создаем временный вектор
- if (!temp.isEmpty()) // Если не пуст
- temp[temp.size-1] += d; // То прибавляем к соответствующему элементу значение d
- return temp; // Возвращаем временный вектор
- }
- void Vector::show() const
- {
- for (int i = 0; i < size; cout << values[i] << " ", i++);
- cout << endl;
- }
- double & Vector::getVal(int index) const
- {
- if (index < 0) index = 0;
- if (index >= size) index = size-1;
- return values[index];
- }
- Vector & Vector::operator=(const Vector & v)
- // Присваивание векторов
- {
- delete[] values; // Очищаем память из-под всех текущих значений
- size = v.size; // Устанавливаем новый размер
- values = new double[size]; // Выделяем память под новый размер
- for(int i = 0; i < size; values[i] = v.values[i], i++); // Копируем все элементы
- return *this; // Возвращаем указатель на текущий объект
- }
- Vector::Vector(int n, double d)
- {
- size = n;
- values = new double[size];
- fill(d);
- }
- Vector::Vector(const Vector & v)
- {
- size = v.size;
- values = new double[size];
- for(int i = 0; i < size; values[i] = v.values[i], i++);
- }
- Vector::~Vector()
- {
- delete[] values;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement