shodan ha scritto:
Se non inserisci dati i valori ottenuti sono casuali, inoltre arretrare un iterator ottenuto da una begin() ha comportamento indefinito, ergo può succedere di tutto. Con gli iterator puoi spostarti solo nell'intervallo compreso tra [ begin() - end() ): ne prima ne dopo avrai qualcosa di valido.
Mi sono spiegato male
Scrivendo cosi:
#include <iostream>
#include "lista_interna.h"
using namespace std;
int main()
{
lista_interna prova;
prova.Impostainizio();
prova.Aggiungi(1);
prova.Aggiungi(2);
prova.Aggiungi(3);
cout<<prova.RestituisciValorePuntato()<<endl;
prova.Vaiavanti();
cout<<prova.RestituisciValorePuntato()<<endl;
prova.Vaiavanti();
cout<<prova.RestituisciValorePuntato()<<endl;
return 0;
}
l'output è:
2686704
1
2
Process returned 0 (0x0) execution time : 0.031 s
Press any key to continue.
notare che da sempre quel numero , potrebbe essere una codifica di qualche tipo di errore?
Un'altra domanda : ma la lista dichiarata in quel modo non è bidirezionale ? facendo il debug a me risultano all'interno dell iteratore due indirizzi uno avanti e uno indietro.
Apparentemente andare avanti e indietro funziona infatti usando:
#include <iostream>
#include "lista_interna.h"
using namespace std;
int main()
{
lista_interna prova;
prova.Impostainizio();
prova.Aggiungi(1);
prova.Aggiungi(2);
prova.Aggiungi(3);
cout<<prova.RestituisciValorePuntato()<<endl;
prova.Vaiindietro();
cout<<prova.RestituisciValorePuntato()<<endl;
prova.Vaiindietro();
cout<<prova.RestituisciValorePuntato()<<endl;
return 0;
}
2686704
3
2
Process returned 0 (0x0) execution time : 0.842 s
Press any key to continue.
quindi va sia avanti che indietro ma come primo output stampa quel numero 2686704
addiritura se scrivo :
#include <iostream>
#include "lista_interna.h"
using namespace std;
int main()
{
lista_interna prova;
prova.Impostainizio();
prova.Aggiungi(1);
prova.Aggiungi(2);
prova.Aggiungi(3);
prova.Vaiindietro();
cout<<prova.RestituisciValorePuntato()<<endl;
prova.Vaiavanti();
cout<<prova.RestituisciValorePuntato()<<endl;
prova.Vaiavanti();
cout<<prova.RestituisciValorePuntato()<<endl;
return 0;
}
l'output è:
3
2686704
1
Process returned 0 (0x0) execution time : 0.016 s
Press any key to continue.
Pare che venga messo questo numero in cima alla lista .
Se però vado avanti prima di una posizione allora va tutto bene.
Se tu mi dici che questo non dovrebbe accadere e che dovrebbero esserci dei valori casuali; la spiegazione puo essere il compilatore? Uso mingw32-g++.exe con code::blocks