Timtsa

C++

Nov 30th, 2018
66
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include <iostream>
  2. #include <iomanip>
  3. #include <algorithm>
  4. using namespace std;
  5.  
  6.  
  7. class MyVector
  8. {
  9. private:
  10.     size_t size;
  11.     size_t capacity;
  12.     int* data;
  13.  
  14. public:
  15.     MyVector()
  16.     {
  17.         size = capacity = 0;
  18.         data = nullptr;
  19.     }
  20.  
  21.     MyVector(size_t _size, int value = 0)
  22.     {
  23.         size = _size;
  24.         capacity = size + size / 2;
  25.  
  26.         data = new int[capacity];
  27.         fill(data, data + capacity, 0);
  28.     }
  29.  
  30.     /* Конструктор копирования вызывается в тех случаях, когда необходимо создать копию существующего объекта, а именно:
  31.         * при передаче объекта в функцию по значению
  32.         * при возвращении объекта из функцию по значению
  33.         * при создании нового объекта как копии уже существующего
  34.  
  35.         Указатель this в данном методе используется в демонстрационных целях. В большинстве случаем его можно опустить, хотя есть исключения,
  36.         о которых будем говорить дополнитьельно
  37.  
  38.     */
  39.     MyVector(const MyVector& other)
  40.     {
  41.         this->size = other.size;
  42.         this->capacity = other.capacity;
  43.  
  44.         this->data = new int[capacity];
  45.         copy(other.data, other.data + other.capacity, this->data);
  46.     }
  47.  
  48.     void print()
  49.     {
  50.         for (size_t i = 0; i < size; i++)
  51.         {
  52.             cout << setw(4) << data[i];     // манипулятор setw задает количество знакомест на экране под вывод числа из массива
  53.         }
  54.         cout << endl;
  55.     }
  56.  
  57.     void push_back(int value)
  58.     {
  59.         if (size < capacity)
  60.         {
  61.             data[size] = value;
  62.             size++;
  63.         }
  64.         // TODO: Добавить реализацию с перераспределением памяти
  65.     }
  66.  
  67.     /************************************************************************************************/
  68.  
  69.     /*
  70.         Добавить в проект:
  71.         - Конструктор, который принимает в качестве параметра массив и количество элементов в нем
  72.         - Конструктор, который принимает в качестве параметра три числа, два из которых задают диапазон чисел, который будет использоваться в качестве элементов массива,
  73.           третий параметр задает шаг, то есть:
  74.           вызов конструктора MyVector v(1, 10, 2) должен создать вектор со следующим набором данных: [1, 3, 5, 7, 9]
  75.           Учитывайте то, что последовательность может быть как возрастающая, так и убывающая
  76.         - Метод getSize(), который будет возвращать текущее значение size
  77.         - Метод getCapacity(), который будет возвращать текущее значение capacity
  78.         - Метод reserve(size_t _capacity), который будет выполнять перераспределение памяти для резервирования
  79.         - Метод clear(), который будет очищать вектор, устанавливать его размер в 0 и сохраняя исходное значение capacity
  80.     */
  81. };
  82.  
  83. int main()
  84. {
  85.     MyVector v1(5);
  86.     v1.print();
  87.     v1.push_back(-1);
  88.     v1.print();
  89.  
  90. }
Add Comment
Please, Sign In to add comment