#include <iostream>
#include <string>
#include <sstream>
#include <vector>
#include <algorithm>
#include <iterator>
using namespace std;
template<class T>
T fromString(string s) {
T result;
stringstream ss(s);
ss >> result;
return result;
}
std::vector<std::string> &split(const std::string &s, char delim, std::vector<std::string> &elems) {
std::stringstream ss(s);
std::string item;
while (std::getline(ss, item, delim)) {
elems.push_back(item);
}
return elems;
}
std::vector<std::string> split(const std::string &s, char delim) {
std::vector<std::string> elems;
split(s, delim, elems);
return elems;
}
void displ(vector<string> el) {
cout << "\n\n";
copy(el.begin(), el.end(), ostream_iterator<string>(cout, "\t"));
cout << "\n\n";
}
class Foo {
double wyn;
size_t wielkoscTablicy;
double *tab;
double x;
public:
Foo(double wn, double x, size_t w):
wyn(wn),
x(x),
wielkoscTablicy(w)
{
tab = new double[w];
for(size_t i = 0; i < w; ++i) {
tab[i] = i*2;
}
}
string serialize() {
string tab = to_string(wielkoscTablicy) + ":";
for(size_t i = 0; i < wielkoscTablicy; ++i) {
tab += to_string(this->tab[i]) + ",";
}
stringstream out;
out << wyn << "-" << x << "-" << tab << "\n";
return out.str();
}
void deserialize(string s) {
vector<string> all = split(s, '-');
displ(all);
this->wyn = fromString<double>(all[0]);
this->x = fromString<double>(all[1]);
vector<string> alltab = split(all[2], ':');
this->wielkoscTablicy = fromString<size_t>(alltab[0]);
displ(alltab);
vector<string> tab = split(alltab[1], ',');
displ(tab);
if(this->tab) delete[] this->tab;
this->tab = new double[this->wielkoscTablicy];
for(size_t i = 0; i < this->wielkoscTablicy; ++i) {
this->tab[i] = fromString<double>(tab[i]);
}
}
};
int main() {
Foo f(10, 12.5, 5);
string fs = f.serialize();
f.deserialize(fs);
cout << fs << endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RyaW5nPgojaW5jbHVkZSA8c3N0cmVhbT4KI2luY2x1ZGUgPHZlY3Rvcj4KI2luY2x1ZGUgPGFsZ29yaXRobT4KI2luY2x1ZGUgPGl0ZXJhdG9yPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwogCnRlbXBsYXRlPGNsYXNzIFQ+ClQgZnJvbVN0cmluZyhzdHJpbmcgcykgewogICAgICAgIFQgcmVzdWx0OwogICAgICAgIHN0cmluZ3N0cmVhbSBzcyhzKTsKICAgICAgICBzcyA+PiByZXN1bHQ7CiAgICAgICAgcmV0dXJuIHJlc3VsdDsKfQogCnN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiAmc3BsaXQoY29uc3Qgc3RkOjpzdHJpbmcgJnMsIGNoYXIgZGVsaW0sIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiAmZWxlbXMpIHsKICAgIHN0ZDo6c3RyaW5nc3RyZWFtIHNzKHMpOwogICAgc3RkOjpzdHJpbmcgaXRlbTsKICAgIHdoaWxlIChzdGQ6OmdldGxpbmUoc3MsIGl0ZW0sIGRlbGltKSkgewogICAgICAgIGVsZW1zLnB1c2hfYmFjayhpdGVtKTsKICAgIH0KICAgIHJldHVybiBlbGVtczsKfQogCiAKc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IHNwbGl0KGNvbnN0IHN0ZDo6c3RyaW5nICZzLCBjaGFyIGRlbGltKSB7CiAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gZWxlbXM7CiAgICBzcGxpdChzLCBkZWxpbSwgZWxlbXMpOwogICAgcmV0dXJuIGVsZW1zOwogCn0KIAp2b2lkIGRpc3BsKHZlY3RvcjxzdHJpbmc+IGVsKSB7CiAgICAgICAgY291dCA8PCAiXG5cbiI7CiAgICAgICAgY29weShlbC5iZWdpbigpLCBlbC5lbmQoKSwgb3N0cmVhbV9pdGVyYXRvcjxzdHJpbmc+KGNvdXQsICJcdCIpKTsKICAgICAgICBjb3V0IDw8ICJcblxuIjsKfQogCmNsYXNzIEZvbyB7CiAgICBkb3VibGUgd3luOwogICAgc2l6ZV90IHdpZWxrb3NjVGFibGljeTsKICAgIGRvdWJsZSAqdGFiOwogICAgZG91YmxlIHg7CiAgICAKcHVibGljOgogICAgRm9vKGRvdWJsZSB3biwgZG91YmxlIHgsIHNpemVfdCB3KToKICAgICAgICB3eW4od24pLAogICAgICAgIHgoeCksCiAgICAgICAgd2llbGtvc2NUYWJsaWN5KHcpCiAgICB7CiAgICAgICAgdGFiID0gbmV3IGRvdWJsZVt3XTsKICAgICAgICAKICAgICAgICBmb3Ioc2l6ZV90IGkgPSAwOyBpIDwgdzsgKytpKSB7CiAgICAgICAgICAgIHRhYltpXSA9IGkqMjsKICAgICAgICB9CiAgICB9CiAKICAgIHN0cmluZyBzZXJpYWxpemUoKSB7CiAgICAgICAgc3RyaW5nIHRhYiA9IHRvX3N0cmluZyh3aWVsa29zY1RhYmxpY3kpICsgIjoiOwogICAgICAgIGZvcihzaXplX3QgaSA9IDA7IGkgPCB3aWVsa29zY1RhYmxpY3k7ICsraSkgewogICAgICAgICAgICB0YWIgKz0gdG9fc3RyaW5nKHRoaXMtPnRhYltpXSkgKyAiLCI7CiAgICAgICAgfQogICAgCiAgICAgICAgc3RyaW5nc3RyZWFtIG91dDsgICAgICAgCiAgICAgICAgb3V0IDw8IHd5biA8PCAiLSIgPDwgeCA8PCAiLSIgPDwgdGFiIDw8ICJcbiI7CiAgICAgICAgcmV0dXJuIG91dC5zdHIoKTsKICAgIH0KIAogICAgdm9pZCBkZXNlcmlhbGl6ZShzdHJpbmcgcykgewogICAgICAgICAgICB2ZWN0b3I8c3RyaW5nPiBhbGwgPSBzcGxpdChzLCAnLScpOwogICAgICAgICAgICBkaXNwbChhbGwpOwogICAgICAgICAgICB0aGlzLT53eW4gPSBmcm9tU3RyaW5nPGRvdWJsZT4oYWxsWzBdKTsKICAgICAgICAgICAgdGhpcy0+eCA9IGZyb21TdHJpbmc8ZG91YmxlPihhbGxbMV0pOwogCiAgICAgICAgICAgIHZlY3RvcjxzdHJpbmc+IGFsbHRhYiA9IHNwbGl0KGFsbFsyXSwgJzonKTsKICAgICAgICAgICAgdGhpcy0+d2llbGtvc2NUYWJsaWN5ID0gZnJvbVN0cmluZzxzaXplX3Q+KGFsbHRhYlswXSk7CiAgICAgICAgICAgIGRpc3BsKGFsbHRhYik7CiAgICAgICAgICAgIHZlY3RvcjxzdHJpbmc+IHRhYiA9IHNwbGl0KGFsbHRhYlsxXSwgJywnKTsKICAgICAgICAgICAgZGlzcGwodGFiKTsKICAgICAgICAgICAgaWYodGhpcy0+dGFiKSBkZWxldGVbXSB0aGlzLT50YWI7CiAgICAgICAgICAgIHRoaXMtPnRhYiA9IG5ldyBkb3VibGVbdGhpcy0+d2llbGtvc2NUYWJsaWN5XTsKICAgICAgICAgICAgZm9yKHNpemVfdCBpID0gMDsgaSA8IHRoaXMtPndpZWxrb3NjVGFibGljeTsgKytpKSB7CiAKICAgICAgICAgICAgICAgIHRoaXMtPnRhYltpXSA9IGZyb21TdHJpbmc8ZG91YmxlPih0YWJbaV0pOwogICAgICAgICAgICB9CiAgICB9Cn07CiAKaW50IG1haW4oKSB7CiAgICBGb28gZigxMCwgMTIuNSwgNSk7CiAgICBzdHJpbmcgZnMgPSBmLnNlcmlhbGl6ZSgpOwogICAgZi5kZXNlcmlhbGl6ZShmcyk7CiAgICBjb3V0IDw8IGZzIDw8IGVuZGw7CiAgICByZXR1cm4gMDsKfQ==
10 12.5 5:0.000000,2.000000,4.000000,6.000000,8.000000,
5 0.000000,2.000000,4.000000,6.000000,8.000000,
0.000000 2.000000 4.000000 6.000000 8.000000
10-12.5-5:0.000000,2.000000,4.000000,6.000000,8.000000,