Advertisement
Guest User

template class for lab1

a guest
Dec 15th, 2019
105
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.43 KB | None | 0 0
  1. #pragma once
  2. #include <iostream>
  3. #include <assert.h>
  4. using namespace std;
  5.  
  6. template<class T>
  7. class StaticVector
  8. {
  9. private:
  10.     int length;
  11.     int maxLength = 5;
  12.     T vector[5];
  13.  
  14.     StaticVector AddVectors(StaticVector a, StaticVector b) {
  15.         StaticVector temp;
  16.         int maxLength = max(a.GetLength(), b.GetLength());
  17.  
  18.         temp.SetLength(maxLength);
  19.         T *vectorATemp = new T[a.GetLength()];
  20.         T *vectorBTemp = new T[b.GetLength()];
  21.  
  22.         a.GetVector(vectorATemp, a.GetLength());
  23.         b.GetVector(vectorBTemp, b.GetLength());
  24.  
  25.         if (a.GetLength() != maxLength)
  26.         {
  27.             for (int i = 0; i < a.GetLength(); i++) {
  28.                 temp.FillVectorByIndex(i, vectorATemp[i] + vectorBTemp[i]);
  29.             }
  30.             for (int i = a.GetLength(); i < maxLength; i++)
  31.             {
  32.                 temp.FillVectorByIndex(i, vectorBTemp[i]);
  33.             }
  34.         }
  35.         else
  36.         {
  37.             for (int i = 0; i < b.GetLength(); i++) {
  38.                 temp.FillVectorByIndex(i, vectorATemp[i] + vectorBTemp[i]);
  39.             }
  40.             for (int i = b.GetLength(); i < maxLength; i++)
  41.             {
  42.                 temp.FillVectorByIndex(i, vectorATemp[i]);
  43.             }
  44.  
  45.         }
  46.  
  47.         delete[] vectorATemp;
  48.         delete[] vectorBTemp;
  49.         return temp;
  50.     }
  51.  
  52.     StaticVector DifferenceVectors(StaticVector a, StaticVector b) {
  53.         StaticVector temp;
  54.         int maxLength = max(a.GetLength(), b.GetLength());
  55.  
  56.         temp.SetLength(maxLength);
  57.         T *vectorATemp = new T[a.GetLength()];
  58.         T *vectorBTemp = new T[b.GetLength()];
  59.  
  60.         a.GetVector(vectorATemp, a.GetLength());
  61.         b.GetVector(vectorBTemp, b.GetLength());
  62.  
  63.         if (a.GetLength() != maxLength)
  64.         {
  65.             for (int i = 0; i < a.GetLength(); i++) {
  66.                 temp.FillVectorByIndex(i, vectorATemp[i] - vectorBTemp[i]);
  67.             }
  68.             for (int i = a.GetLength(); i < maxLength; i++)
  69.             {
  70.                 temp.FillVectorByIndex(i, 0 - vectorBTemp[i]);
  71.             }
  72.         }
  73.         else
  74.         {
  75.             for (int i = 0; i < b.GetLength(); i++) {
  76.                 temp.FillVectorByIndex(i, vectorATemp[i] - vectorBTemp[i]);
  77.             }
  78.             for (int i = b.GetLength(); i < maxLength; i++)
  79.             {
  80.                 temp.FillVectorByIndex(i, vectorATemp[i]);
  81.             }
  82.  
  83.         }
  84.  
  85.         delete[] vectorATemp;
  86.         delete[] vectorBTemp;
  87.         return temp;
  88.     }
  89.  
  90.  
  91.     T ProductVectors(StaticVector a, StaticVector b) {
  92.         T product = 0;
  93.         int maxLength = max(a.GetLength(), b.GetLength());
  94.  
  95.         T *vectorATemp = new T[a.GetLength()];
  96.         T *vectorBTemp = new T[b.GetLength()];
  97.  
  98.         a.GetVector(vectorATemp, a.GetLength());
  99.         b.GetVector(vectorBTemp, b.GetLength());
  100.  
  101.         if (a.GetLength() != maxLength)
  102.         {
  103.             for (int i = 0; i < a.GetLength(); i++) {
  104.                 product += a.GetVectorValueByIndex(i) * b.GetVectorValueByIndex(i);
  105.             }
  106.         }
  107.         else
  108.         {
  109.             for (int i = 0; i < b.GetLength(); i++) {
  110.                 product += a.GetVectorValueByIndex(i) * b.GetVectorValueByIndex(i);
  111.             }
  112.         }
  113.  
  114.         delete[] vectorATemp;
  115.         delete[] vectorBTemp;
  116.         return product;
  117.     }
  118.  
  119.     int max(int a, int b) {
  120.         return (a < b) ? b : a;
  121.     }
  122.  
  123. public:
  124.     StaticVector() {
  125.         length = 0;
  126.     }
  127.  
  128.     StaticVector(T initializeValue) {
  129.         for (int i = 0; i < maxLength; i++) {
  130.             vector[i] = initializeValue;
  131.         }
  132.     }
  133.  
  134.     StaticVector(const StaticVector &object) : length(object.length), maxLength(object.maxLength) {
  135.         cout << "copy constructor" << endl;
  136.         for (int i = 0; i < maxLength; i++)
  137.         {
  138.             vector[i] = object.vector[i];
  139.         }
  140.     }
  141.  
  142.     void SetLength(int len) {
  143.         if (len >= 0 && len < maxLength)
  144.             length = len;
  145.         else
  146.             length = maxLength - 1;
  147.     }
  148.  
  149.     int GetLength() {
  150.         return length;
  151.     }
  152.  
  153.     int GetMaxLength() {
  154.         return maxLength;
  155.     }
  156.  
  157.     void FillVector() {
  158.         assert(length > 0 && length < maxLength);
  159.         for (int i = 0; i < length; i++) {
  160.             cin >> vector[i];
  161.         }
  162.     }
  163.  
  164.     void FillVectorByIndex(int index, T value) {
  165.         assert(index >= 0 && index < maxLength);
  166.         vector[index] = value;
  167.     }
  168.  
  169.     void PrintVector() {
  170.         assert(length >= 0 && length < maxLength);
  171.         for (int i = 0; i < length; i++) {
  172.             cout << vector[i] << " ";
  173.         }
  174.         cout << endl;
  175.     }
  176.  
  177.     void GetVector(T * temp, int len) {
  178.         assert(len == length);
  179.         for (int i = 0; i < length; i++) {
  180.             temp[i] = vector[i];
  181.         }
  182.     }
  183.  
  184.     T GetVectorValueByIndex(int index) {
  185.         assert(index >= 0 && index < length);
  186.         return vector[index];
  187.     }
  188.  
  189.  
  190.     StaticVector operator+(const StaticVector& other) {//, const StaticVector& right) {
  191.         return AddVectors(*this, other);
  192.     }
  193.  
  194.     StaticVector operator-(const StaticVector& other) {//, const StaticVector& right) {
  195.         return DifferenceVectors(*this, other);
  196.     }
  197.  
  198.     T operator*(const StaticVector& other) {//, const StaticVector& right) {
  199.         return ProductVectors(*this, other);
  200.     }
  201.  
  202.     ~StaticVector() { }
  203. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement