Re: независимый от платформы код
Добавлено: 09 дек 2016, 23:59
Поскольку в этой теме, как ни в какой другой, часто упоминается Boost, то "освежу" тему информацией по Boost.
Такой пример приложения: найти сколько дней между 2-мя введенными датами?
Самые убогие школяры начинают сразу писать массивы {31, 28, 31, 30, ...} и вспоминать (выдумывать) устройство календаря, как они его помнят и представляют.
Классически эта задача решается с POSIX API дата/время (struct tm, gmtime(), mktime(), asctime(), ctime() ... ), но это достаточно громоздко и не так просто.
В Boost это может выглядеть так (независимо от платформы!):
И это выглядит так:
Подробнее здесь.
Такой пример приложения: найти сколько дней между 2-мя введенными датами?
Самые убогие школяры начинают сразу писать массивы {31, 28, 31, 30, ...} и вспоминать (выдумывать) устройство календаря, как они его помнят и представляют.
Классически эта задача решается с POSIX API дата/время (struct tm, gmtime(), mktime(), asctime(), ctime() ... ), но это достаточно громоздко и не так просто.
В Boost это может выглядеть так (независимо от платформы!):
Код: Выделить всё
#include <iostream>
#include <locale>
#include <boost/date_time/gregorian/gregorian.hpp>
using namespace std;
int main() {
cin.imbue( locale( cin.getloc(), new boost::gregorian::date_input_facet( "%d.%m.%Y" ) ) );
boost::gregorian::date d1, d2;
cin >> d1 >> d2;
if( d1 > d2 )
swap( d1, d2 );
cout << d2 - d1 << endl;
}
Код: Выделить всё
[olej@dell boost]$ ./difd
01.01.2016
01.01.2017
366
[olej@dell boost]$ ./difd
01.01.2015
01.01.2016
365
[olej@dell boost]$ ./difd
01.01.2000
01.01.2001
366
[olej@dell boost]$ ./difd
01.01.1900
01.01.1901
365