Advertisement
Mafro

Untitled

Feb 16th, 2021
769
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.14 KB | None | 0 0
  1. #pragma once
  2.  
  3. #include <iostream>
  4. #include <cassert>
  5. namespace wear
  6. {
  7.     template < typename T > class base_matrix
  8.     {
  9.     protected:
  10.  
  11.         size_t baseSize{ 10 };
  12.         T* container{ new T[baseSize] };
  13.         T* operator*() { return container; }
  14.         T& operator&() { return *container; }
  15.  
  16.         void resize_container(size_t newSize)
  17.         {
  18.             T* tempcontainer{ new T[baseSize] };
  19.             std::memcpy(tempcontainer, container, baseSize);
  20.             container = T[newSize]; baseSize = newSize ;
  21.             std::memcpy(container, tempcontainer, newSize);
  22.             delete[] tempcontainer;
  23.         }
  24.  
  25.         virtual ~base_matrix() { delete[] container; }
  26.  
  27.         size_t size() const { return baseSize; }
  28.     };
  29.  
  30.     template < typename T > class matrix: protected base_matrix < T >
  31.     {
  32.     public:
  33.        
  34.         matrix() {}
  35.         matrix(std::initializer_list < T >& list) : data(list) { }
  36.  
  37.         void push(T content)
  38.         {
  39.             if (data.size() <= size)
  40.             {
  41.                 data.resize_container(size + 1);
  42.                 data[size] = content;
  43.                 ++size;
  44.             }
  45.             else
  46.                 data[size] = content;
  47.         }
  48.  
  49.         T at(size_t idContainer) { return &data[idContainer]; }
  50.        
  51.  
  52.     private:
  53.         wear::base_matrix < T > data;
  54.         size_t size{ data.size() };
  55.     };
  56.  
  57. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement