Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it
    Registrato dal
    May 2017
    Messaggi
    14

    [C++] funzioni push_back su vector di struct

    Salve a tutti, sto facendo pratica con i vector e sono incappato in un dubbio...

    usando la funzione push_back su un normale vector di int funziona normalmente.

    Ho provato a modificare il vector in questo modo:

    struct prova{
    int a;
    string b;
    }

    vector <prova> esperimento (3);

    come posso fare ad inserire ad esempio un nuovo nodo del vettore con 3 aaaa?

    E' possibile prima di tutto utilizzare la punzione push_back con un vettore di struct? se si come si fa ad accedere ai suoi campi una volta chiamata la funizione per creare un nuovo nodo?
    Ringrazio chi potrà darmi una mano

  2. #2
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    codice:
    // 1° modo
    esperimento.push_back(Prova(3,"aaaa"));
    
    // 2° modo (un po' più moderno)
    esperimento.pusk_back(Prova{3,"aaaa"});
    
    // 3° modo per evitare un temporaneo
    esperimento.emplace_back(3,"aaaa");
    
    // accedere a un elemento dopo gli inserimenti
    esperimento[ indice_valido_compreso_tra_0_e_esperimento.size() ].a = qualcosa;
    qualcosa = esperimento[indice_valido_compreso_tra_0_e_esperimento.size() ].a; // idem per b
    This code and information is provided "as is" without warranty of any kind, either expressed
    or implied, including but not limited to the implied warranties of merchantability and/or
    fitness for a particular purpose.

  3. #3
    Utente di HTML.it
    Registrato dal
    May 2017
    Messaggi
    14
    Grazie mille, non ho solo capito cosa eviteresti con il terzo modo.

  4. #4
    Utente di HTML.it
    Registrato dal
    May 2017
    Messaggi
    14
    Quote Originariamente inviata da shodan Visualizza il messaggio
    codice:
    // 1° modo
    esperimento.push_back(Prova(3,"aaaa"));
    
    // 2° modo (un po' più moderno)
    esperimento.pusk_back(Prova{3,"aaaa"});
    
    // 3° modo per evitare un temporaneo
    esperimento.emplace_back(3,"aaaa");
    
    // accedere a un elemento dopo gli inserimenti
    esperimento[ indice_valido_compreso_tra_0_e_esperimento.size() ].a = qualcosa;
    qualcosa = esperimento[indice_valido_compreso_tra_0_e_esperimento.size() ].a; // idem per b
    Altra domanda:; è possibile utilizzare pusk/push_back all' interno di un un ciclo??

  5. #5
    Utente di HTML.it
    Registrato dal
    May 2017
    Messaggi
    14
    io ho provato a farla cosi:

    struct prova {


    int a;
    string b;
    };


    void assegna(vector<prova> vettore, int valore);


    int main() {


    vector <prova> esperimento(9);
    int num = 4;





    for (int i = 0; i <esperimento.size(); i++) {

    assegna(esperimento, i);
    cout << i << ": " << esperimento[i].valore << " " << esperimento[i].seme << endl;

    }




    }


    void assegna(vector<prova> vettore, int valore) {
    vettore.push_back(esperimento{ valore,"aaaa" });
    }

  6. #6
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    Si, ma devi passare il vector per reference altrimenti non porti fuori gli inserimenti.
    codice:
    void assegna(vector<prova>& vettore, int valore) {
         	vettore.push_back(esperimento{ valore,"aaaa" });
    }
    This code and information is provided "as is" without warranty of any kind, either expressed
    or implied, including but not limited to the implied warranties of merchantability and/or
    fitness for a particular purpose.

  7. #7
    Utente di HTML.it
    Registrato dal
    May 2017
    Messaggi
    14
    Ora funziona grazie mille

    ho un ultimo dubbio poi giuri che la smetto hahahah

    ho complicato le cose con questa funzione:
    ho un vettore di struct di tipo prova e un puntatore ad una struct prova, se parto ad inserire l indice 0 tutto funzionante ma se invece parto dal mezzo esempio 5 esplode malissimo. Quello che sto cercando di ottenere è di copiare solo i valori passati per quell indice
    Sai spiegarmi dove sbaglio?

    void funzione_prova int blocco, vector <prova> vettore_finale, prova *vettore_iniziale {
    int indice;


    for (int y = 0; y < blocco; y++) {
    cout << "inserire l'indice della carte che vuoi mettere in tavola" << endl;
    cin >> indice;
    cout << "sto inserendo: " << vettore_iniziale [indice].valore << endl;
    cout << "sto inserendo: " << vettore_iniziale [indice].seme << endl;
    vettore_finale.push_back(prova{ vettore_iniziale [indice].valore, vettore_iniziale [indice].seme });
    cout << "hai messo nel piatto: " << vettore_iniziale [indice].valore << " " << vettore_iniziale [indice].seme << endl;
    cout << "nel piatto: " << vettore_finale[indice].valore << " " << vettore_finale[indice].seme << endl;
    }


    }

  8. #8
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    Stai usando un indice non valido, ossia non compreso nell'intervallo [0 , vector.size()), probabilmente per vettore_finale.
    P.S. Cerca di imparare ad usare i tag code altrimenti il codice è quasi illeggibile.
    This code and information is provided "as is" without warranty of any kind, either expressed
    or implied, including but not limited to the implied warranties of merchantability and/or
    fitness for a particular purpose.

  9. #9
    Utente di HTML.it
    Registrato dal
    May 2017
    Messaggi
    14
    grazie infinite, si devo imparare ad usarli
    Quote Originariamente inviata da shodan Visualizza il messaggio
    Stai usando un indice non valido, ossia non compreso nell'intervallo [0 , vector.size()), probabilmente per vettore_finale.
    P.S. Cerca di imparare ad usare i tag code altrimenti il codice è quasi illeggibile.

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.