Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it
    Registrato dal
    Aug 2012
    Messaggi
    25

    [C++] Costruttore di copia

    Salve a tutti! Non riesco a capire come faccio ad implementare il costruttore di copia per la classe lista.

    Qui ci sono le definizioni della struct nodo e della classe lista.
    codice:
    struct nodo
    {
       int valore;
       nodo *succ;
    };
    
    class lista
    {
      nodo *l;
    
      nodo* insert(nodo *p,int x);
      bool find(nodo *, int);
      nodo* split(nodo *l1);
      nodo* Merge(nodo *l1, nodo *l2);
      nodo* MergeSort(nodo *list);
    
      public:
    
      lista(){l=0;}       // costruttore
      ~lista();           // distruttore
      void push(int);
      bool cancella(int);
      void stampa();
      bool trova(int);
      void ordina();
           
      
    };
    lista(const lista &L) so che questa è la sintassi per il costruttore di copia ma non capisco come fare per la realizzazione della copia.

    Spero mi possiate aiutare! grazie!

  2. #2
    Devi copiare ricorsivamente la lista, ricreando uno ad uno gli elementi e copiando i valori corrispondenti.
    Amaro C++, il gusto pieno dell'undefined behavior.

  3. #3
    Utente di HTML.it
    Registrato dal
    Aug 2012
    Messaggi
    25
    Ho trovato questo codice funzionante.
    Ci sono però dei passaggi che non ho capito:


    codice:
    lista::lista(const lista& L) {
    
        nodo *p, *q, *r;      //definisco tre nuovi nodi: p=L.l (non ho capito), q sarà il nodo della
                                    //lista copia ed r un nodo di appoggio per costruire la copia.
    
        p = L.l;                 //Perchè?? 
        l = 0;                 
    
        if (p == 0)             // Verifico se ci sono elementi da copiare o la lista è vuota
            cout << "Lista vuota...\n";
        else
            while (p != 0) {               //Scorro la lista
                q = new nodo;            //Alloco il nuovo nodo q
    
                if (l == 0)                 //Effettuo la copia del primo elemento. 
                    l = q;                  //Domanda: perchè usa l e non p?
    
                else
                    r->succ = q;        // Se non è il primo elemento, procedo con un inserimento 
                q->valore = p->valore;   //in testa
    
                p = p->succ;          //Passo all'elemento successivo
                r = q;                    
    
            }
    
        q->succ = 0;              //L'ultimo valore della lista copia punta a null.
    
    }

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.