#include <iostream>
template <typename T>
struct infinite_array
{
infinite_array() : data(NULL), array_length(0)
{
}
T& operator[](unsigned long long idx)
{
//if(idx + 1 > size())
//{
// resize(idx+1);
//}
return data[idx];
}
unsigned long long size() const
{
return array_length;
}
void resize(unsigned long long idx)
{
std::cout << "Resize with idx " << idx << std::endl;
T *temp = new T[idx];
std::copy(data, data+size(), temp);
delete [] data;
data = temp;
array_length = idx;
}
private:
T *data;
unsigned long long array_length;
};
int main()
{
infinite_array<int> ar;
ar.resize(10);
for(int i = 0; i < 10; ++i)
{
ar[i] = i;
}
ar.resize(32);
ar[30] = ar[31] = 10;
for(int i = 0; i < ar.size(); ++i)
std::cout << ar[i] << ' ';
std::cout << std::endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4Kc3RydWN0IGluZmluaXRlX2FycmF5IAp7CiAgICBpbmZpbml0ZV9hcnJheSgpIDogZGF0YShOVUxMKSwgYXJyYXlfbGVuZ3RoKDApCgl7CgkKCX0KCQogICAgVCYgb3BlcmF0b3JbXSh1bnNpZ25lZCBsb25nIGxvbmcgaWR4KQoJewoJCS8vaWYoaWR4ICsgMSA+IHNpemUoKSkgCgkJLy97CgkJLy8JcmVzaXplKGlkeCsxKTsgIAoJCS8vfQoJCXJldHVybiBkYXRhW2lkeF07Cgl9CgogICAgdW5zaWduZWQgbG9uZyBsb25nIHNpemUoKSBjb25zdAoJewoJICAgIHJldHVybiBhcnJheV9sZW5ndGg7Cgl9CgkKICAgIHZvaWQgcmVzaXplKHVuc2lnbmVkIGxvbmcgbG9uZyBpZHgpCgl7CgkJc3RkOjpjb3V0IDw8ICJSZXNpemUgd2l0aCBpZHggIiA8PCBpZHggPDwgc3RkOjplbmRsOwoJCVQgKnRlbXAgPSBuZXcgVFtpZHhdOwoJCXN0ZDo6Y29weShkYXRhLCBkYXRhK3NpemUoKSwgdGVtcCk7CgkJZGVsZXRlIFtdIGRhdGE7CgkJZGF0YSA9IHRlbXA7CgkJYXJyYXlfbGVuZ3RoID0gaWR4OwoJfQoKICAgIHByaXZhdGU6CiAgICAgICAgVCAqZGF0YTsKICAgICAgICB1bnNpZ25lZCBsb25nIGxvbmcgYXJyYXlfbGVuZ3RoOwp9OwoKaW50IG1haW4oKSAKewogICAgaW5maW5pdGVfYXJyYXk8aW50PiBhcjsgCiAgICBhci5yZXNpemUoMTApOwogICAgZm9yKGludCBpID0gMDsgaSA8IDEwOyArK2kpIAoJewogICAgICAgIGFyW2ldID0gaTsKICAgIH0KICAgIAogICAgYXIucmVzaXplKDMyKTsKICAgIGFyWzMwXSA9IGFyWzMxXSA9IDEwOwoKICAgIGZvcihpbnQgaSA9IDA7IGkgPCBhci5zaXplKCk7ICsraSkKICAgICAgICBzdGQ6OmNvdXQgPDwgYXJbaV0gPDwgJyAnOyAgCiAgICBzdGQ6OmNvdXQgPDwgc3RkOjplbmRsOwoKICAgIHJldHVybiAwOwp9