Im folgenden Programm nur ein Element, gehe ich data
, die viele verschiedene Tage enthält, auf die Funktion GetAvgDayVolm()
, die cout
Anweisung in dieser Funktion dann 1
ausgibt.Liste mit vielen structs anerkannt als
Aber es sollte mehr als 1
ausgeben, da es mehr als eine unterschiedliche Daten in data
gibt. Es sieht aus, curTime
wird geändert, obwohl das Programm nicht innerhalb der if
Anweisung überhaupt geht. Siehst du etwas falsch?
long int GetAvgDayVolm(list<struct DataPoint>* data)
{
long long int totalVolm = 0;
long int numOfDays = 1;
struct DataPoint dp = (*data).front();
time_t rawTime2 = dp.timeStamp;
time_t rawTime = 0;
struct tm* curTime = gmtime(&rawTime2);
struct tm* movingTime = new struct tm();
for(list<struct DataPoint>::iterator it = (*data).begin(); it != (*data).end(); ++it)
{
rawTime = (*it).timeStamp;
movingTime = gmtime(&rawTime);
totalVolm += (*it).volm;
if(curTime->tm_mday != movingTime->tm_mday ||
curTime->tm_mon != movingTime->tm_mon ||
curTime->tm_year != movingTime->tm_year)
{
numOfDays = numOfDays + 1;
curTime = movingTime;
}
}
cout<<numOfDays<<endl;
return 0;
}
Sie müssen entweder, um die Daten zu kopieren, oder verwenden Sie 'gmtime_r' (' gmtime_s' unter Windows). Letzteres würde ich tun, da es threadsicher ist. – paddy
Nicht verwandt: Entweder du machst eine Menge Einfügungen in der Mitte, Spleiße und ähnliches, oder du solltest die Verwendung von 'std :: list' wahrscheinlich überdenken. –