Advertisement
Guest User

Untitled

a guest
Apr 25th, 2018
201
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.41 KB | None | 0 0
  1. #ifndef F14_H
  2. #define F14_H
  3.  
  4. #include <new>
  5. #include <typeinfo>
  6. #include <string>
  7. #include <stdexcept>
  8.  
  9. template <typename T>
  10. class F14
  11. {
  12.     T *v;
  13.     int cap, used;
  14.  
  15.   public:
  16.     typedef T * iterator;
  17.     F14(int n=20)
  18.     {
  19.         v = new T[n];
  20.         cap = n;
  21.         used = 0;
  22.     }
  23.     F14(int n, T c)
  24.     {
  25.         v = new T[n];
  26.         cap = n;
  27.         used = n;
  28.         for (int i = 0; i < n; i++)
  29.             v[i] = c;
  30.     }
  31.     F14(T *b, T *e)
  32.     {
  33.         int size = (e-b);// / sizeof(T);
  34.         cap = size;
  35.         used = size;
  36.         v = new T[size];
  37.         int i;
  38.         for (i = 0; i < size; i++)
  39.             v[i] = b[i];
  40.     }
  41.     ~F14()
  42.     {
  43.         delete[] v;
  44.     }
  45.  
  46.     T *begin()
  47.     {
  48.         if (!used)
  49.             throw std::out_of_range("out_of_range");
  50.         return v;
  51.     }
  52.     T *end()
  53.     {
  54.         if (!used)
  55.             throw std::out_of_range("out_of_range");
  56.         //if (used == cap)
  57.         //    inc();
  58.         return v+used;
  59.     }
  60.  
  61.     void inc(int n = 10)
  62.     {
  63.         T *v2 = new T[cap + n];
  64.         cap += n;
  65.         for (int i=0; i < cap; i++)
  66.             v2[i] = v[i];
  67.  
  68.         delete[] v;
  69.         v = v2;
  70.     }
  71.     void dec(int n = 10)
  72.     {
  73.         T *v2 = new T[cap - 10];
  74.         cap -= n;
  75.         for (int i; i < cap; i++)
  76.             v2[i] = v[i];
  77.  
  78.         delete[] v;
  79.         v = v2;
  80.     }
  81.  
  82.     T &back()
  83.     {
  84.         if(used<0)throw std::out_of_range("out_of_range");
  85.         return v[used==0?used:used-1];
  86.     }
  87.     T back2()
  88.     {
  89.         if(used<0)throw std::out_of_range("out_of_range");
  90.         return v[used==0?used:used-1];
  91.     }
  92.     T &front()
  93.     {
  94.         return v[0];
  95.     }
  96.     void push_back(T c)
  97.     {
  98.         if (used == cap)
  99.             inc();
  100.         v[used++] = c;
  101.     }
  102.     void pop_back()
  103.     {
  104.         if (used<=0)
  105.             throw std::out_of_range("out_of_range");
  106.         //v[used-1] = 0;
  107.         used--;
  108.         //if (used < (cap - 15))  dec();
  109.     }
  110.     T get_back()
  111.     {
  112.         T s = back2();
  113.         pop_back();
  114.         return s;
  115.     }
  116.     void resize(int size){
  117.         if(size<cap){
  118.             T * ujv = new T[size];
  119.             for(int i = 0;i<size;i++)
  120.                 ujv[i] = v[i];
  121.             delete[] v;
  122.             v = ujv;
  123.             used = (used>size?size:used);
  124.             cap = size;
  125.         }else
  126.         if(size>cap){
  127.             T * ujv = new T[size];
  128.             for(int i = 0;i<used;i++)
  129.                 ujv[i] = v[i];
  130.             delete[] v;
  131.             v = ujv;
  132.             cap = size;
  133.         }
  134.     }
  135.     void resize(int size, T val){
  136.         delete[] v;
  137.         v = new T[size];
  138.         for(int i = 0;i<size;i++)v[i] = val;
  139.         used = size;
  140.         cap = size;
  141.     }
  142.  
  143. };
  144.  
  145. template<>
  146. int F14<int>::get_back(){
  147.     int s = back()-14;
  148.     pop_back();
  149.     //pop_back();
  150.     return s;
  151. }
  152.  
  153. template<>
  154. std::string  F14<std::string>::get_back(){
  155.     return "Stork Gabor,1MI,IMSC3,L3p <storkgaborka98@gmail.com> NO047V";
  156. }
  157.  
  158. template <typename T>
  159. class osFunctor{
  160.     std::ostream & o;
  161.     char s[10];
  162. public:
  163.     osFunctor(std::ostream& os = std::cout, const char * str = ""):o(os){
  164.         int i =0;
  165.         while(str[i] && i<10){
  166.             s[i] = str[i];
  167.             i++;
  168.         }
  169.         s[i]=0;
  170.     }
  171.  
  172.     void operator()(T& a){
  173.         o << a << s;
  174.     }
  175.     ~osFunctor(){
  176.  
  177.     }
  178.  
  179. };
  180.  
  181.  
  182. #endif
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement