Advertisement
Guest User

Code with changes

a guest
Nov 16th, 2023
216
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.29 KB | Source Code | 0 0
  1. #include <iostream>
  2. #include <algorithm>
  3.  
  4.  
  5. class vector {
  6.     int sz;
  7.     double* elem;
  8. public:
  9.     vector(int s)
  10.         :sz{ s }, elem{ new double[s] }
  11.     {
  12.         for (int i = 0; i < sz; ++i) elem[i] = 0.0;
  13.     }
  14.  
  15.     vector(std::initializer_list<double> lst)
  16.         :sz{ int(lst.size())}, elem{new double[sz]}
  17.     {
  18.         std::copy(lst.begin(), lst.end(), elem);
  19.     }
  20.  
  21.     // Example from book
  22.     //
  23.     /*vector(std::initializer_list<double> lst)
  24.         :sz{ lst.size() }, elem{ new double[sz] } << lst.size() gives a narrowing conversion error. lst.size() returns size_t and not an int.
  25.     {
  26.         std::copy(lst.begin(), lst.end(), elem);
  27.     }*/
  28.  
  29.  
  30.     ~vector()
  31.     {
  32.         delete[] elem;
  33.     }
  34.    
  35.     double& operator[](int index)
  36.     {
  37.         if (index >= sz) {
  38.             std::cout << "index out of bounds, exiting";
  39.             exit(0);
  40.         }
  41.         return elem[index];
  42.     };
  43.  
  44.  
  45.  
  46.     int size() { return sz; }
  47.  
  48.     vector& operator=(const vector&);
  49.     vector(const vector&);
  50. };
  51.  
  52.  
  53. vector& vector::operator=(const vector& a)
  54. {
  55.     if (this == &a)
  56.         return *this;
  57.  
  58.     double* p = new double[a.sz];
  59.     std::copy(a.elem, a.elem + a.sz, p);
  60.     delete[] elem;
  61.     elem = p;
  62.     sz = a.sz;
  63.     return *this;
  64. }
  65.  
  66.  
  67. // Example from book
  68. //
  69. //vector& vector::operator=(const vector& a)
  70. //{
  71. //    double* p = new double[a.sz];
  72. //    std::copy(a.elem, a.elem + a.sz, elem);  copying to elem then deleting elem next line?
  73. //    delete[] elem;
  74. //    elem = p;
  75. //    sz = a.sz;
  76. //    return *this;
  77. //}
  78.  
  79.  
  80. vector::vector(const vector& arg)
  81.     :sz{ arg.sz }, elem{ new double[arg.sz] }
  82. {
  83.     std::copy(arg.elem, arg.elem + arg.sz, elem);
  84. }
  85.  
  86. //Example from book
  87. //
  88. //vector::vector(const vector& arg)
  89. //    :sz{ arg.sz }, elem{ new double[arg.sz] }
  90. //{
  91. //    
  92. //    std::copy(arg, arg + sz, elem); can't do arg + sz
  93. //}
  94.  
  95.  
  96. int main()
  97. {
  98.     vector v(20);
  99.     for (int i = 0; i < v.size(); ++i)
  100.     {
  101.         v[i] = i;
  102.         std::cout <<"V: " << v[i] << '\n';
  103.     }
  104.  
  105.     v = { 5,5,5,5,5 };
  106.  
  107.     for (int i = 0; i < v.size(); ++i)
  108.     {
  109.         std::cout << "V new: " << v[i] << '\n';
  110.     }
  111.  
  112.     vector a{ v };
  113.     for (int i = 0; i < a.size(); ++i)
  114.     {
  115.         std::cout << "A: " << v[i] << '\n';
  116.     }
  117. }
  118.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement