#include <functional>
#include <algorithm>
#include <vector>
#include <string>
#include <iostream>
#include <iterator>
using namespace std;
template<typename F1, typename F2>
class unary_composer
{
F1 f1;
F2 f2;
public:
unary_composer(F1 lf1, F2 lf2) : f1(lf1), f2(lf2){}
template <typename ARG>
auto operator()(ARG x)->decltype(f1(f2(x))) { return f1(f2(x)); }
};
template <typename F1, typename F2>
unary_composer<F1, F2> compose(F1 fone, F2 ftwo)
{
return unary_composer<F1, F2>(fone, ftwo);
}
int main()
{
const int SZ = 6;
vector<string> vs{"1.2", "3.4", "5.6", "6.7", "7.8", "8.9"};
vector<double> vd;
transform(vs.begin(), vs.end(), back_inserter(vd), compose(std::atof, mem_fn(&string::c_str)));
copy(vd.begin(), vd.end(), ostream_iterator<double>(cout, " ")); // print to console
cout<<endl;
}
I2luY2x1ZGUgPGZ1bmN0aW9uYWw+CiNpbmNsdWRlIDxhbGdvcml0aG0+CiNpbmNsdWRlIDx2ZWN0b3I+CiNpbmNsdWRlIDxzdHJpbmc+CiNpbmNsdWRlIDxpb3N0cmVhbT4KI2luY2x1ZGUgPGl0ZXJhdG9yPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKdGVtcGxhdGU8dHlwZW5hbWUgRjEsIHR5cGVuYW1lIEYyPgpjbGFzcyB1bmFyeV9jb21wb3Nlcgp7CiAgICBGMSBmMTsKICAgIEYyIGYyOwoKcHVibGljOgogICAgdW5hcnlfY29tcG9zZXIoRjEgbGYxLCBGMiBsZjIpIDogZjEobGYxKSwgZjIobGYyKXt9CgogICAgdGVtcGxhdGUgPHR5cGVuYW1lIEFSRz4KICAgIGF1dG8gb3BlcmF0b3IoKShBUkcgeCktPmRlY2x0eXBlKGYxKGYyKHgpKSkgeyByZXR1cm4gZjEoZjIoeCkpOyB9Cn07Cgp0ZW1wbGF0ZSA8dHlwZW5hbWUgRjEsIHR5cGVuYW1lIEYyPgp1bmFyeV9jb21wb3NlcjxGMSwgRjI+IGNvbXBvc2UoRjEgZm9uZSwgRjIgZnR3bykKewogICByZXR1cm4gdW5hcnlfY29tcG9zZXI8RjEsIEYyPihmb25lLCBmdHdvKTsKfQoKaW50IG1haW4oKQp7CiAgIGNvbnN0IGludCBTWiA9IDY7CiAgIHZlY3RvcjxzdHJpbmc+IHZzeyIxLjIiLCAiMy40IiwgIjUuNiIsICI2LjciLCAiNy44IiwgIjguOSJ9OwogICB2ZWN0b3I8ZG91YmxlPiB2ZDsKCiAgIHRyYW5zZm9ybSh2cy5iZWdpbigpLCB2cy5lbmQoKSwgYmFja19pbnNlcnRlcih2ZCksIGNvbXBvc2Uoc3RkOjphdG9mLCBtZW1fZm4oJnN0cmluZzo6Y19zdHIpKSk7CgogICBjb3B5KHZkLmJlZ2luKCksIHZkLmVuZCgpLCBvc3RyZWFtX2l0ZXJhdG9yPGRvdWJsZT4oY291dCwgIiAiKSk7IC8vIHByaW50IHRvIGNvbnNvbGUKICAgY291dDw8ZW5kbDsKCn0=