SHOW:
|
|
- or go back to the newest paste.
| 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 | } |