fork download
  1. #include <iostream>
  2. #include <string.h>
  3.  
  4. class MyVector {
  5. private:
  6. int *_pbegin;
  7. int *_pend;
  8. int *_pcapacity;
  9. public:
  10. MyVector() {
  11. _pbegin = new int;
  12. _pend = _pbegin;
  13. _pcapacity = _pbegin + 1;
  14. }
  15.  
  16. ~MyVector() {
  17. delete _pbegin;
  18. }
  19.  
  20. void reallocate(size_t newCapacity) {
  21. // Copy data into a temporary buffer
  22. size_t prevSize = size();
  23. int *prevData = new int[prevSize];
  24. memcpy(prevData, _pbegin, prevSize * sizeof(int));
  25.  
  26. // Remove current data from memory and
  27. // reallocate the amount of available memory
  28. delete _pbegin;
  29. _pbegin = new int[newCapacity];
  30. _pend = _pbegin + prevSize;
  31. _pcapacity = _pbegin + newCapacity;
  32.  
  33. //Copy previous data into the new memory
  34. memcpy(_pbegin, prevData, prevSize * sizeof(int));
  35.  
  36. // Remove the temporary buffer from memory
  37. delete prevData;
  38. }
  39.  
  40. void push(int value) {
  41. if (_pend == _pcapacity) {
  42. reallocate(capacity() * 2);
  43. }
  44.  
  45. *_pend = value;
  46. _pend++;
  47. }
  48.  
  49. int at(size_t pos) {
  50. return _pbegin[pos];
  51. }
  52.  
  53. size_t size() {
  54. return _pend - _pbegin;
  55. }
  56.  
  57. size_t capacity() {
  58. return _pcapacity - _pbegin;
  59. }
  60. };
  61.  
  62. int main() {
  63. MyVector vec;
  64.  
  65. std::cout << "Current size: " << vec.size() << std::endl;
  66. std::cout << "Current capacity: " << vec.capacity() << std::endl << std::endl;
  67.  
  68. vec.push(42);
  69.  
  70. std::cout << "Inserted one element..." << std::endl;
  71. std::cout << "Current size: " << vec.size() << std::endl;
  72. std::cout << "Current capacity: " << vec.capacity() << std::endl << std::endl;
  73.  
  74. vec.push(1234);
  75.  
  76. std::cout << "Inserted one element..." << std::endl;
  77. std::cout << "Current size: " << vec.size() << std::endl;
  78. std::cout << "Current capacity: " << vec.capacity() << std::endl << std::endl;
  79.  
  80. vec.push(99);
  81.  
  82. std::cout << "Inserted one element..." << std::endl;
  83. std::cout << "Current size: " << vec.size() << std::endl;
  84. std::cout << "Current capacity: " << vec.capacity() << std::endl << std::endl;
  85.  
  86. vec.push(1);
  87. vec.push(500);
  88.  
  89. std::cout << "Inserted two elements..." << std::endl;
  90. std::cout << "Current size: " << vec.size() << std::endl;
  91. std::cout << "Current capacity: " << vec.capacity() << std::endl << std::endl;
  92.  
  93. std::cout << "Listing each element..." << std::endl;
  94. for (size_t i = 0; i < vec.size(); ++i) {
  95. printf("vec[%u] => %d\n", i, vec.at(i));
  96. }
  97. std::cout << std::endl;
  98. }
Success #stdin #stdout 0s 3428KB
stdin
Standard input is empty
stdout
Current size: 0
Current capacity: 1

Inserted one element...
Current size: 1
Current capacity: 1

Inserted one element...
Current size: 2
Current capacity: 2

Inserted one element...
Current size: 3
Current capacity: 4

Inserted two elements...
Current size: 5
Current capacity: 8

Listing each element...
vec[0] => 42
vec[1] => 1234
vec[2] => 99
vec[3] => 1
vec[4] => 500