Advertisement
Guest User

contenitore.cpp

a guest
Nov 13th, 2019
109
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.37 KB | None | 0 0
  1. #include "contenitore.h"
  2.  
  3. Contenitore::Contenitore(int cIniziale) {
  4.     utilizzati = 0;
  5.     elementi = new int[cIniziale];
  6.     capacita = cIniziale;
  7. }
  8.  
  9. Contenitore operator +(Contenitore c1, Contenitore c2) {
  10.     Contenitore c = Contenitore(c1.dimensione() + c2.dimensione());
  11.     return c;
  12.  
  13. }
  14.  
  15. ostream& operator <<(ostream& out, Contenitore c) {
  16.     int ultimo = c.dimensione() - 1;
  17.     for(int i = 0; i < ultimo; i++) {
  18.         out << c.getElemento(i) << ", ";
  19.  
  20.     }
  21.     out << c.getElemento(ultimo);
  22.     return out;
  23. }
  24.  
  25. int Contenitore::conta(int elem) {
  26.     int numero = 0;
  27.  
  28.     for(int i = 0; i < utilizzati; i++) {
  29.         if(elementi[i] == elem) {numero++;}
  30.     }
  31.     return numero;
  32. }
  33.  
  34. int Contenitore::elimina(int elem) {
  35.  
  36.     int eliminati = 0;
  37.     int i = 0;
  38.  
  39.     while(i < utilizzati) {
  40.         if(elementi[i] == elem) {
  41.             utilizzati--;
  42.             elementi[i] = elementi[utilizzati];
  43.             eliminati++;
  44.         }
  45.         else {
  46.             i++;
  47.         }
  48.     }
  49.     return eliminati;
  50. }
  51.  
  52. bool Contenitore::eliminaUno(int elem) {
  53.     int i = 0;
  54.  
  55.     while (i < utilizzati) {
  56.         if(elementi[i] == elem) {
  57.             utilizzati--;
  58.             elementi[i] = elementi[utilizzati];
  59.             return true;
  60.         }
  61.         else {
  62.             i++;
  63.         }
  64.     }
  65.     return false;
  66. }
  67.  
  68. void Contenitore::inserisci(int elem) {
  69.     cout << endl << "######## Procedura inserisci(" << elem << ") ########" << endl;
  70.     cout << "elem: " << elem << " Utilizzati: " << utilizzati << endl;
  71.  
  72.     for(int i = 0; i < utilizzati; i++) {
  73.                 cout << "elementi[" << i << "]: " << elementi[i] << " ";
  74.         }
  75.     if(utilizzati == capacita) {
  76.         alloca(utilizzati+1);
  77.     }
  78.     elementi[utilizzati] = elem;
  79.     cout << "elementi[" << utilizzati << "] = " << elementi[utilizzati] << endl;
  80.     utilizzati++;
  81.     cout << "########################################" << endl;
  82. }
  83.  
  84. int Contenitore::getElemento(int i) {
  85.     if(i < 0 || i >= utilizzati) {
  86.         return 0;
  87.     }
  88.     return elementi[i];
  89.  
  90. }
  91.  
  92. void Contenitore::operator +=(Contenitore c) {
  93.     if(utilizzati + c.dimensione() > capacita) {
  94.         alloca(utilizzati + c.dimensione());
  95.     }
  96.  
  97.     for(int i = utilizzati; i < utilizzati + c.dimensione() ; i++) {
  98.         int indice = i - utilizzati;
  99.         elementi[i] = c.getElemento(indice);
  100.     }
  101.     utilizzati += c.dimensione();
  102. }
  103.  
  104. void Contenitore::operator =(Contenitore c) {
  105.     if(this == &c) {return;}
  106.     if(capacita != c.getCapacita()) {
  107.         int *v = new int[c.getCapacita()];
  108.         delete[] elementi;
  109.         elementi = v;
  110.         capacita = c.getCapacita();
  111.     }
  112.  
  113.     for(int i = 0; i < c.dimensione(); i++) {
  114.         elementi[i] = c.getElemento(i);
  115.     }
  116.     utilizzati = c.dimensione();
  117. }
  118.  
  119. void Contenitore::alloca(int dim) {
  120.     cout << endl << endl << "======== Procedura alloca ============" << endl;
  121.     if(capacita == dim) {
  122.         return;
  123.     }
  124.     if(dim < utilizzati) {
  125.         dim = utilizzati;
  126.     }
  127.     int *v = new int[dim];
  128.     for(int i = 0; i < utilizzati; i++) {
  129.         v[i] = elementi[i];
  130.         cout << "v[" << i << "]: " << v[i] << " elementi[" << i << "]: " << elementi[i] << endl;
  131.     }
  132.     delete[] elementi;
  133.     elementi = v;
  134.     delete[] v;
  135.     capacita = dim;
  136.     cout << "======================================" << endl << endl;
  137. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement