J'ai vérifié ce code considérablement maintenant et je me suis assuré que je produis les choses 'correctes' pour décrire le problème. L'itérateur ne pointe jamais du tout sur la liste, mais un autre groupe d'adresses qui contiennent heureusement les données correctes.Les problèmes d'itérateur continuent
J'ai deux questions:
1 = étant donné la forme des Couts, suis-je fournir en sortie les éléments corrects pour enquêter sur la raison pour laquelle cette boucle ne sort pas;
2 = si (1), alors ce qui se passe pour produire cette sortie et avez-vous des conseils à approfondir mes connaissances de pointeur (j'ai utilisé ce pour le format de boucle plusieurs fois avant et ce que n'est jamais arrivé,
/questions
Code:
#include "neutronFileReader.h"
using namespace std ;
neutronFileReader::neutronFileReader()
{
}
list<vector<float> > neutronFileReader::spectrum(char* filename)
{
ofstream addresses ;
addresses.open("adresses.txt") ;
ifstream fin(filename) ;
string binhi, binlo ;
list<vector<float> > neutronSpectrum ;
list<vector<float> >::iterator nS ;
vector<float> EnergyProbability ;
while(!fin.eof())
{
EnergyProbability.clear() ;
getline(fin, binlo, ' ') ; //get the binlo string
getline(fin, binhi, ' ') ; //get the binhi string
EnergyProbability.push_back(atof(binhi.c_str())+(atof(binhi.c_str()) - atof(binlo.c_str()))/2) ; //store middle of bin as emission Energy
getline(fin, binlo) ; //try not to waste memory space
EnergyProbability.push_back(atof(binlo.c_str())) ; //store emnission probability
neutronSpectrum.push_back(EnergyProbability) ; //put the vector in the list
}
for(nS = neutronSpectrum.begin() ; nS != neutronSpectrum.end() ; nS++) //go through the neutron spectrum
{
EnergyProbability = (*nS) ;
addresses << &neutronSpectrum.begin() << " : " << &(*nS) << " : " << &neutronSpectrum.end() << endl ; // print energy & prob to screen
cout << &neutronSpectrum.begin() << " : " << &(*nS) << " : " << &neutronSpectrum.end() << endl ;
}
return neutronSpectrum ;
}
et est ici la sortie:
0x28fbc4 : 0x510c38 : 0x28fbc0
0x28fbc4 : 0x510c58 : 0x28fbc0
0x28fbc4 : 0x510c78 : 0x28fbc0
0x28fbc4 : 0x510c98 : 0x28fbc0
0x28fbc4 : 0x510cb8 : 0x28fbc0
0x28fbc4 : 0x510cd8 : 0x28fbc0
0x28fbc4 : 0x510cf8 : 0x28fbc0
0x28fbc4 : 0x510d18 : 0x28fbc0
0x28fbc4 : 0x510d38 : 0x28fbc0
0x28fbc4 : 0x510d58 : 0x28fbc0
0x28fbc4 : 0x510d78 : 0x28fbc0
0x28fbc4 : 0x510d98 : 0x28fbc0
0x28fbc4 : 0x510db8 : 0x28fbc0
0x28fbc4 : 0x510dd8 : 0x28fbc0
0x28fbc4 : 0x510df8 : 0x28fbc0
0x28fbc4 : 0x510e18 : 0x28fbc0
0x28fbc4 : 0x510e38 : 0x28fbc0
0x28fbc4 : 0x510e58 : 0x28fbc0
0x28fbc4 : 0x510e78 : 0x28fbc0
0x28fbc4 : 0x510e98 : 0x28fbc0
0x28fbc4 : 0x510eb8 : 0x28fbc0
merci beaucoup.
Ce n'était pas, maintenant c'est grâce à votre aide, en fait, il se comportait correctement après un poste. * embarassé. Cependant ce va-et-vient a grandement amélioré ma compréhension des itérateurs alors merci TRES Révolte, je suis désolé de perdre votre temps. J'espère que vous en avez aussi quelque chose! – morb
En effet! La dernière fois que j'ai joué avec des conteneurs STL (la dernière fois que j'ai joué avec C++) c'était il y a 2 ans, donc ça a servi de rappel. Content que je puisse être utile! – AlexJF