Advertisement
dmkozyrev

Vector

Feb 10th, 2016
75
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.59 KB | None | 0 0
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. class Vector
  6. {
  7.     int size;
  8.     double * values;
  9. public:
  10.     Vector(int n, double d = 0);
  11.     Vector(const Vector & v);
  12.     ~Vector();
  13.    
  14.     int getSize() const {return size;};
  15.     double & getVal(int) const;
  16.  
  17.     double & operator[](int index) const {return getVal(index);};
  18.     Vector & operator=(const Vector &);
  19.    
  20.     void show() const;
  21.     bool isEmpty() const {return (size==0);};
  22.    
  23.     void fill(const double & d){for(int i=0; i<size; values[i++]=d);};
  24.     void zeros(){fill(0);};
  25.     void ones(){fill(1);};
  26.    
  27.     friend Vector operator-(const Vector &);
  28.    
  29.     friend Vector operator-(const Vector &, const Vector &);
  30.     friend Vector operator-(const Vector &, const double &);
  31.     friend Vector operator-(const double &, const Vector &);
  32.    
  33.     friend Vector operator+(const Vector &, const Vector &);
  34.     friend Vector operator+(const Vector &, const double &);
  35.     friend Vector operator+(const double &, const Vector &);
  36. };
  37.  
  38. int main()
  39. {
  40.     Vector a(3, 1), b(5, -1);
  41.     for(int i=1; i<a.getSize(); ++i) a[i]=a[i-1]+2;
  42.     for(int i=1; i<b.getSize(); ++i) b[i]=b[i-1]-1;
  43.     cout << "Vector a = "; a.show();
  44.     cout << "Vector b = "; b.show();
  45.     Vector c = a + b;
  46.     cout << "Vector c = a + b = "; c.show();
  47.     double d = 5;
  48.    
  49.     c = a + d;
  50.     cout << "Vector c = a + " << d << " = "; c.show();
  51.    
  52.     c = d + a;
  53.     cout << "Vector c = " << d << " + a = "; c.show();
  54.    
  55.     c = b - a;
  56.     cout << "Vector c = b - a = "; c.show();
  57.    
  58.     c = b - d;
  59.     cout << "Vector c = b - " << d << " = "; c.show();
  60.    
  61.     c = d - b;
  62.     cout << "Vector c = " << d << " - b = "; c.show();
  63. }
  64.  
  65. Vector operator-(const Vector & v)
  66. // Изменение всех значений вектора на противоположные им
  67. {
  68.     Vector temp = v;
  69.     for(int i=0; i < temp.size; temp[i]= -temp[i], i++);
  70.     return temp;
  71. }
  72.    
  73. Vector operator-(const Vector & a, const Vector & b)
  74. // Вычитание из вектора а вектора b как сумма а и (-b)
  75. {
  76.     return a + (-b);
  77. }
  78.  
  79. Vector operator-(const Vector & a, const double & d)
  80. // Вычитание из вектора a вещественного числа справа как сумма a + (-d);
  81. {
  82.     return a + (-d);
  83. }
  84.  
  85. Vector operator-(const double & d, const Vector & a)
  86. // Вычитание из вектора а вещественного числа слева как сумма d + (-a)
  87. {
  88.     return d + (-a);
  89. }
  90.  
  91. Vector operator+(const Vector & a, const Vector & b)
  92. // Сложение двух векторов
  93. {
  94.     bool aMax = a.size > b.size; // Определяем , имеет ли вектора а большую длину относительно вектора b
  95.     int maxSize = aMax ? a.size:b.size; // Инициализируем длину максимального вектора
  96.     int minSize = !aMax ? a.size:b.size; // Инициализируем длину минимального вектора
  97.     Vector temp(maxSize); // Создаем временный вектор , размер которого равен размеру максимального вектора
  98.    
  99.     // Пока мы не вышли за пределы векторов a и b , складываем соответствующие значения и записываем в векток temp
  100.     for(int i = 0; i < minSize; temp[i] = a[i] + b[i], i++);
  101.    
  102.     // Затем мы копируем все значения из большего вектора в temp
  103.     for(int i = minSize; i < maxSize; temp[i] = aMax ? a[i]:b[i], i++);
  104.    
  105.     // Возвращаем вектор temp
  106.     return temp;
  107. }
  108.  
  109. Vector operator+(const Vector & v, const double & d)
  110. // Сложение вектора с вещественным числом справа ( прибавление к начальному элементу вектора )
  111. {
  112.     Vector temp(v); // Создаем временный вектор
  113.     if (!temp.isEmpty()) // Если не пуст
  114.         temp[0] += d; // То прибавляем к соответствующему элементу значение d
  115.     return temp;
  116. }
  117.  
  118. Vector operator+(const double & d, const Vector & v)
  119. // Сложение вектора с вещественным числом слева ( прибавление к последнему элементу вектора )
  120. {
  121.     Vector temp(v); // Создаем временный вектор
  122.     if (!temp.isEmpty()) // Если не пуст
  123.         temp[temp.size-1] += d; // То прибавляем к соответствующему элементу значение d
  124.     return temp; // Возвращаем временный вектор
  125. }
  126.  
  127. void Vector::show() const
  128. {
  129.     for (int i = 0; i < size; cout << values[i] << " ", i++);
  130.     cout << endl;
  131. }
  132.  
  133. double & Vector::getVal(int index) const
  134. {
  135.     if (index < 0) index = 0;
  136.     if (index >= size) index = size-1;
  137.     return values[index];
  138. }
  139.  
  140. Vector & Vector::operator=(const Vector & v)
  141. // Присваивание векторов
  142. {
  143.     delete[] values; // Очищаем память из-под всех текущих значений
  144.     size = v.size; // Устанавливаем новый размер
  145.     values = new double[size]; // Выделяем память под новый размер
  146.     for(int i = 0; i < size; values[i] = v.values[i], i++); // Копируем все элементы
  147.     return *this; // Возвращаем указатель на текущий объект
  148. }
  149.  
  150. Vector::Vector(int n, double d)
  151. {
  152.     size = n;
  153.     values = new double[size];
  154.     fill(d);
  155. }
  156.  
  157. Vector::Vector(const Vector & v)
  158. {
  159.     size = v.size;
  160.     values = new double[size];
  161.     for(int i = 0; i < size; values[i] = v.values[i], i++);
  162. }
  163.  
  164. Vector::~Vector()
  165. {
  166.     delete[] values;
  167. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement