次のプログラムでは、多くの異なる日数を含むdata
を関数GetAvgDayVolm()
に渡し、この関数内のcout
ステートメントは1
を出力します。多くの構造体が1つのメンバとして認識されているリスト
data
に複数の異なる日付があるため、出力は1
以上である必要があります。プログラムはif
の中に入っていませんが、curTime
のように見えます。あなたは間違ったことを見ますか? gmtimeはマンページで
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;
}
あなたはデータをコピー・アウト、または 'gmtime_r'(Windows上で' gmtime_s')を使用するのいずれかが必要です。後者はスレッドセーフであるため、私はこれを行います。 – paddy
関連していません:真ん中やスプライスなどで挿入が非常に多いか、おそらく 'std :: list'の使用法を再考するべきです。 –