Advertisement
fcamuso

Corso recupero C++ - video 31

Feb 8th, 2023
1,047
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 2.20 KB | None | 0 0
  1. /*
  2.   Contenitore a capienza infinita di stringhe .
  3.  
  4.   - costruttore con dimensione iniziale
  5.   - costruttore che riceve un array
  6.   - costruttore che riceve il nome di un file
  7.  
  8.   - stampa()
  9.   - is_empty(): è vuoto?
  10.   - size(): quanti elementi sono attualmente presenti
  11.   - push_back(stringa): aggiunte la stringa al contenuto
  12.   - clear(): svuota il vector
  13.   - at(posizione): restituisce l'elemento alla posizione indicata
  14.  
  15. */
  16. #include <iostream>
  17. #include <fstream>
  18.  
  19. using namespace std;
  20.  
  21. class MyVector {
  22.  public:
  23.    MyVector() {}
  24.  
  25.    MyVector(string vs[], int quante) {
  26.       v = new string[quante];
  27.  
  28.       for (inseriti=0; inseriti<quante; inseriti++)
  29.         v[inseriti] = vs[inseriti];
  30.  
  31.       capienza=inseriti;
  32.    }
  33.  
  34.    MyVector(string nome_file)
  35.    {
  36.      ifstream f(nome_file);
  37.      string riga="";
  38.  
  39.      while (getline(f, riga)) push_back(riga);
  40.  
  41.      f.close(); f.clear();
  42.  
  43.    }
  44.  
  45.    void stampa()
  46.    {
  47.      for (int i=0; i<inseriti; i++)
  48.         cout << v[i] << endl;
  49.    }
  50.  
  51.    void push_back(string s){
  52.  
  53.      if (inseriti==capienza)
  54.      {
  55.         string *temp = new string[2*capienza];
  56.  
  57.         for (int i=0;i<inseriti;i++)
  58.           temp[i] = v[i];
  59.  
  60.         delete [] v;
  61.         v = temp;
  62.  
  63.         capienza*=2;
  64.      }
  65.  
  66.      v[inseriti] = s;
  67.      inseriti++;
  68.    }
  69.  
  70.    bool is_empty () {
  71.      return inseriti==0;
  72.    }
  73.  
  74.    int size() {return inseriti;}
  75.  
  76.    void clear() {inseriti=0;}
  77.  
  78.    void reset() {
  79.      delete[] v;
  80.      inseriti=0;
  81.    }
  82.  
  83.    string at(int posizione)
  84.    {
  85.      if (posizione<0 || posizione>=inseriti)
  86.        throw invalid_argument("Posizione non valida\n");
  87.      else
  88.       return v[posizione];
  89.    }
  90.  
  91.   ~MyVector() {
  92.     if (capienza>0) delete[] v;
  93.   }
  94.  
  95.  private:
  96.    string *v = nullptr;
  97.    int capienza = 0;
  98.    int inseriti = 0;
  99.  
  100. };
  101.  
  102. int main()
  103. {
  104.   string v[] = {"s1", "s2", "s3"};
  105.  
  106.   MyVector myVect = MyVector(v, 3);
  107.   //myVect.stampa();
  108.  
  109.   myVect.push_back("s4");
  110.   myVect.push_back("s5");
  111.   //myVect.stampa();
  112.  
  113.   try {
  114.     //cout << myVect.at(3);
  115.   }
  116.   catch (invalid_argument e)
  117.   {
  118.     cout << e.what() << endl;
  119.   }
  120.  
  121.   MyVector myVect2 = MyVector("dati.txt");
  122.   myVect2.stampa();
  123.  
  124.     return 0;
  125. }
  126.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement