1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67
|
#include <iostream>
#include <string>
#include <vector>
#include <functional>
#include <numeric>
using namespace std;
class Time
{
friend ostream &operator<<(ostream &str, Time const &time);
size_t d_days;
size_t d_hours;
size_t d_minutes;
size_t d_seconds;
public:
Time(size_t hours, size_t minutes, size_t seconds);
Time &operator+=(Time const &rhs);
};
Time operator+(Time const &lhs, Time const &rhs)
{
Time ret(lhs);
return ret += rhs;
}
Time::Time(size_t hours, size_t minutes, size_t seconds)
:
d_days(0),
d_hours(hours),
d_minutes(minutes),
d_seconds(seconds)
{}
Time &Time::operator+=(Time const &rhs)
{
d_seconds += rhs.d_seconds;
d_minutes += rhs.d_minutes + d_seconds / 60;
d_hours += rhs.d_hours + d_minutes / 60;
d_days += rhs.d_days + d_hours / 24;
d_seconds %= 60;
d_minutes %= 60;
d_hours %= 24;
return *this;
}
ostream &operator<<(ostream &str, Time const &time)
{
return str << time.d_days << " days, " << time.d_hours <<
" hours, " <<
time.d_minutes << " minutes and " <<
time.d_seconds << " seconds.";
}
int main(int argc, char **argv)
{
vector<Time> tvector;
tvector.push_back(Time( 1, 10, 20));
tvector.push_back(Time(10, 30, 40));
tvector.push_back(Time(20, 50, 0));
tvector.push_back(Time(30, 20, 30));
cout <<
accumulate
(
tvector.begin(), tvector.end(), Time(0, 0, 0), plus<Time>()
) <<
'\n';
}
// Displays: 2 days, 14 hours, 51 minutes and 30 seconds.
|