// Copyright Evgeny Panasyuk 2012.
// Distributed under the Boost Software License, Version 1.0.
// (See accompanying file LICENSE_1_0.txt or copy at
// http://w...content-available-to-author-only...t.org/LICENSE_1_0.txt)
#include <iostream>
#include <ostream>
#include <vector>
#include <string>
using namespace std;
// ____________________________________________________________________________________ //
struct record
{
string name;
int age;
};
struct ref_record
{
string &name;
int &age;
};
class scattered_record
{
vector<string> name;
vector<int> age;
public:
unsigned size()
{
return unsigned(name.size() | age.size() | 0);
}
void push_back(const record &rec)
{
name.push_back(rec.name);
age.push_back(rec.age);
}
ref_record operator[](unsigned index)
{
ref_record temp = { name[index], age[index], };
return temp;
}
};
// ____________________________________________________________________________________ //
int main()
{
scattered_record vecs;
{
record temp={"One",1}; vecs.push_back(temp);
}
{
record temp={"Two",2}; vecs.push_back(temp);
}
{
record temp={"Three",3}; vecs.push_back(temp);
}
for(unsigned i=0,size=vecs.size();i!=size;++i)
{
cout << vecs[i].name << " " << vecs[i].age << endl;
vecs[i].name+="_postfix";
vecs[i].age+=10;
}
cout << string(16,'_') << endl;
for(unsigned i=0,size=vecs.size();i!=size;++i)
cout << vecs[i].name << " " << vecs[i].age << endl;
}
Ly8gICAgICAgICAgICAgQ29weXJpZ2h0IEV2Z2VueSBQYW5hc3l1ayAyMDEyLgovLyBEaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuCi8vICAgIChTZWUgYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQKLy8gICAgICAgICAgaHR0cDovL3cuLi5jb250ZW50LWF2YWlsYWJsZS10by1hdXRob3Itb25seS4uLnQub3JnL0xJQ0VOU0VfMV8wLnR4dCkKCiNpbmNsdWRlIDxpb3N0cmVhbT4KI2luY2x1ZGUgPG9zdHJlYW0+CiNpbmNsdWRlIDx2ZWN0b3I+CiNpbmNsdWRlIDxzdHJpbmc+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgovLyBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18gLy8KCnN0cnVjdCByZWNvcmQKewogICAgc3RyaW5nIG5hbWU7CiAgICBpbnQgYWdlOwp9OwpzdHJ1Y3QgcmVmX3JlY29yZAp7CiAgICBzdHJpbmcgJm5hbWU7CiAgICBpbnQgJmFnZTsKfTsKY2xhc3Mgc2NhdHRlcmVkX3JlY29yZAp7CiAgICB2ZWN0b3I8c3RyaW5nPiBuYW1lOwogICAgdmVjdG9yPGludD4gYWdlOwpwdWJsaWM6CiAgICB1bnNpZ25lZCBzaXplKCkKICAgIHsKICAgICAgICByZXR1cm4gdW5zaWduZWQobmFtZS5zaXplKCkgfCBhZ2Uuc2l6ZSgpIHwgMCk7CiAgICB9CiAgICB2b2lkIHB1c2hfYmFjayhjb25zdCByZWNvcmQgJnJlYykKICAgIHsKICAgICAgICBuYW1lLnB1c2hfYmFjayhyZWMubmFtZSk7CiAgICAgICAgYWdlLnB1c2hfYmFjayhyZWMuYWdlKTsKICAgIH0KICAgIHJlZl9yZWNvcmQgb3BlcmF0b3JbXSh1bnNpZ25lZCBpbmRleCkKICAgIHsKICAgICAgICByZWZfcmVjb3JkIHRlbXAgPSB7IG5hbWVbaW5kZXhdLCBhZ2VbaW5kZXhdLCB9OwogICAgICAgIHJldHVybiB0ZW1wOwogICAgfQp9OwoKLy8gX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fIC8vCgppbnQgbWFpbigpCnsKICAgIHNjYXR0ZXJlZF9yZWNvcmQgdmVjczsKICAgIHsKICAgICAgICByZWNvcmQgdGVtcD17Ik9uZSIsMX07IHZlY3MucHVzaF9iYWNrKHRlbXApOwogICAgfQogICAgewogICAgICAgIHJlY29yZCB0ZW1wPXsiVHdvIiwyfTsgdmVjcy5wdXNoX2JhY2sodGVtcCk7CiAgICB9CiAgICB7CiAgICAgICAgcmVjb3JkIHRlbXA9eyJUaHJlZSIsM307IHZlY3MucHVzaF9iYWNrKHRlbXApOwogICAgfQogICAgZm9yKHVuc2lnbmVkIGk9MCxzaXplPXZlY3Muc2l6ZSgpO2khPXNpemU7KytpKQogICAgewogICAgICAgIGNvdXQgPDwgdmVjc1tpXS5uYW1lIDw8ICIgIiA8PCB2ZWNzW2ldLmFnZSA8PCBlbmRsOwogICAgICAgIHZlY3NbaV0ubmFtZSs9Il9wb3N0Zml4IjsKICAgICAgICB2ZWNzW2ldLmFnZSs9MTA7CiAgICB9CiAgICBjb3V0IDw8IHN0cmluZygxNiwnXycpIDw8IGVuZGw7CiAgICBmb3IodW5zaWduZWQgaT0wLHNpemU9dmVjcy5zaXplKCk7aSE9c2l6ZTsrK2kpCiAgICAgICAgY291dCA8PCB2ZWNzW2ldLm5hbWUgPDwgIiAiIDw8IHZlY3NbaV0uYWdlIDw8IGVuZGw7Cn0K