fork download
  1. #include <iostream>
  2. template <typename T>
  3. struct infinite_array
  4. {
  5. infinite_array() : data(NULL), array_length(0)
  6. {
  7.  
  8. }
  9.  
  10. T& operator[](unsigned long long idx)
  11. {
  12. //if(idx + 1 > size())
  13. //{
  14. // resize(idx+1);
  15. //}
  16. return data[idx];
  17. }
  18.  
  19. unsigned long long size() const
  20. {
  21. return array_length;
  22. }
  23.  
  24. void resize(unsigned long long idx)
  25. {
  26. std::cout << "Resize with idx " << idx << std::endl;
  27. T *temp = new T[idx];
  28. std::copy(data, data+size(), temp);
  29. delete [] data;
  30. data = temp;
  31. array_length = idx;
  32. }
  33.  
  34. private:
  35. T *data;
  36. unsigned long long array_length;
  37. };
  38.  
  39. int main()
  40. {
  41. infinite_array<int> ar;
  42. ar.resize(10);
  43. for(int i = 0; i < 10; ++i)
  44. {
  45. ar[i] = i;
  46. }
  47.  
  48. ar.resize(32);
  49. ar[30] = ar[31] = 10;
  50.  
  51. for(int i = 0; i < ar.size(); ++i)
  52. std::cout << ar[i] << ' ';
  53. std::cout << std::endl;
  54.  
  55. return 0;
  56. }
Success #stdin #stdout 0s 3472KB
stdin
Standard input is empty
stdout
Resize with idx 10
Resize with idx 32
0 1 2 3 4 5 6 7 8 9 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 10 10