Oppure

Loading
27/03/14 20:30
bububs
Riassumo semplicemente il mio problema.
c'è un classe i cui unici parametri privati sono un array dinamico di stringhe (string) e una dimensiona D.
Ho un metodo pubblico ADD (string X) che aggiunge una stringa all'array.. come? aumentando (dinamicamente) la dimensione di uno (ovviamente). Il fatto è che mi si crasha il programma in runtime e non capisco il perché... :grr:

Faccio un esempio pratico per farvi capire meglio.
class classe{
  private:
    string* V;
    int d;
  public:
    classe(){
          V = new string[10];
    }
    void add(string x){
            if( !contains(x) ){
                string* tmp = new string[d + 1];
                for(int i = 0; i < d; i++)
                     tmp[i] = V[i];
                delete[] V;
                V = tmp;
                d++;
            }
        }
};

int main(){
 classe cl;
 cl.add("ciao");
}

Ultima modifica effettuata da bububs 27/03/14 20:31
aaa
27/03/14 20:56
nessuno
Prima di tutto lo fai per completare un esercizio/compito o perché ti serve un programma del genere?

Nel secondo caso, non ha senso usare un array di string ...
Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
27/03/14 21:03
Poggi Marco
Ciao!

Il programma non funziona perchè non inizializzi d ( il registro della dimensione del vettore ) nel costruttore della classe.
Dovresti impostare un' altra variabile per il conteggio degli elementi effettivamente presenti nel vettore.
A mio parere non è efficiente riallaccare l' intero vettore ad ogni chiamata del metodo ADD( ). Controlla se nel vettore c'è spazio sufficiente prima di aumentare la dimensione, e nel caso sia necessario, raddoppia la capacità.
aaa
28/03/14 5:47
bububs
Intanto grazie a entrambi per l'interessamento al mio problema. Inizio a rispondervi uno alla volta.
Nessuno, so che vi sono numerose varianti molto piu funzionali di questa ma sono costretto ad usarla perche è un esercizio, molto piu piu elaborato, e richiede tutto cio'.
Detto cio' mettiamo il caso che aggiunga una funzione "allarga" come mi ha suggerito Marco. Come sarebbe gestita? Per il fatto della dimensione il parametro D è richiesto dal programma e non posso farne a meno.. purtroppo. :_doubt:
aaa
28/03/14 9:40
nessuno
Infatti ti avevo proprio chiesto se era per un compito.

Per la questione di d, forse non hai capito. Tu non dai mai un valore iniziale a d e questa è la causa del tuo errore.
Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
28/03/14 13:26
Poggi Marco
Postato originariamente da bububs:Intanto grazie a entrambi per l'interessamento al mio problema. Inizio a rispondervi uno alla volta.
Nessuno, so che vi sono numerose varianti molto piu funzionali di questa ma sono costretto ad usarla perche è un esercizio, molto piu piu elaborato, e richiede tutto cio'.
Detto cio' mettiamo il caso che aggiunga una funzione "allarga" come mi ha suggerito Marco. Come sarebbe gestita? Per il fatto della dimensione il parametro D è richiesto dal programma e non posso farne a meno.. purtroppo. :_doubt:
Come ha suggerito nessuno, nel costruttore devi necessariamente inizializzare d, inoltre ti serve una variabile per il conteggio degli elementi effettivamente registrati nel vettore.
Esempio:
class classe{
  private:
    string* V;
    int d, elementi;
  public:
    classe(){
          d=10; // Assegno una dimensione iniziale al vettore
          elementi=0; // Indice degli elementi presenti
          V = new string[d];
    }
    void add(string x){
            if( elementi>=d ){
                 allarga() // Richiamo la funzione per ridimensionare il vettore.
            }
            v[elementi]=x; 
            elementi++; // Aggiorno l'indice degli elementi registrati.
        }
};
Ultima modifica effettuata da Poggi Marco 28/03/14 13:30
aaa
28/03/14 23:04
bububs
Ringrazio entrambi, ho risolto come da voi suggerito. Grazie mille :k:
aaa