Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    [C++] Scorrere un VECTOR e visualizzare gli elementi

    Salve ragazzi, in pratica io ho un vector di stringhe. Ho bisogno di stampare l'elemento successivo (1 solo elemento ogni volta che premo il comando), precedente e visualizzare il corrente.

    Questo è lo squarcio di codice che mi da problemi.
    codice:
    vector<Chiamata*> call;
    vector<Chiamata*>::iterator it = call.begin();
    void Registro::stampaSuccessivo(){
        if(it!=call.end()){
            it++;
            (*it)->print(); 
    //dovrei creare una variabile corrente per poi stampare il corrente.. ma se non mi funziona questo non ha senso..
            }else cout << "Non ci sono successivi!";
    }
    Ora.. il programma mi parte, se premo il comando StampaSuccessivo mi dice che non ci sono successivi, e fin qui tutto bene, ma appena inserisco anche un solo elemento il programma va in crash..

    Grazie in anticipo per le evenutali risposte..
    Ultima modifica di Ronald940; 16-06-2015 a 12:32

  2. #2
    La stampa e l'incremento devono essere invertiti (l'iteratore end() non può essere stampato, punta ad un elemento dopo l'ultimo).
    Amaro C++, il gusto pieno dell'undefined behavior.

  3. #3
    Cominciamo da capo..
    Ho un vettore di stringhe.
    Ho necessità di stampare ogni elemento uno ad uno (premendo un tasto) e quindi andando avanti..
    Ho creato due funzioni stampa successivo e stampa precedente..
    Ora, come faccio con gli operatori?

  4. #4
    Come ti ha detto MItaly, devi spostare l'incremento dell'iteratore alla fine del blocco-dati, invece tu prima controlli che (it!=call.end())
    ma poi incrementi subito it++, quindi nella riga successiva è come se tu richiamassi il call.end()->print(), ma l'iteratore end() punta ad un elemento che in pratica non esiste.
    Come inserisci i nuovi elementi ?
    01010011 01100001 01101101 01110101 01100101 01101100 01100101 01011111 00110111 00110000
    All errors are undocumented features waiting to be discovered.

  5. #5
    Il codice molto probabilmente é errato per quello che devo fare io (l'ho modificato ma niente da fare).
    Ora.. Gli elementi sono stringhe del vector..
    vector<Chiamata*> call;
    In chiamata.h ho fatto il metodo print() che stampa numero, durata bla bla bla.
    La domanda é.. Avendo questo vector con tutte le chiamate, come faccio a scorrere a uno a uno..
    Esempio..
    Premo "a" sulla tastiera e mi stampa la chiamata che ho inserito precedentemente.. Teoricamente il cursore dovrebbe fermarsi su questa chiamata per eventuali modifiche.. Ma se non mi interessa questa chiamata e voglio andare avanti, premo di nuovo "a" e passa alla chiamata successiva.. Se premo "a" a cazzo ad un certo punto mi dovrebbe apparire il messaggio che non ci sono più chiamate.

  6. #6
    In quel modo dichiari un vector di puntatori a oggetti di tipo 'Chiamata', non di stringhe.
    Il vector è stato creato come alternativa OO agli array tipici del C.
    Puoi scorrere tutti gli elementi con
    For( size_t i=0; i<call.size(); i++)
    cout<< call[0] <<endl;
    Ma non è ancora chiaro cosa deve fare il prog, e qual'è il tuo approccio.
    Sarebbe il caso postassi un codice, compilabile, che riproduca il problema.
    01010011 01100001 01101101 01110101 01100101 01101100 01100101 01011111 00110111 00110000
    All errors are undocumented features waiting to be discovered.

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 © 2025 vBulletin Solutions, Inc. All rights reserved.