Created
November 6, 2024 18:08
-
-
Save sunmeat/e96638d35e22cc2662e8a84c5fcb3819 to your computer and use it in GitHub Desktop.
vector v.0.1
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <iostream> | |
#include <windows.h> | |
using namespace std; | |
class Vector { | |
unsigned int size = 0; // количество действительно присутствующих элементов в контейнере | |
unsigned int capacity = 10; // ёмкость (вместительность, запас памяти) | |
int* data = nullptr; // указатель на динамический массив целых чисел | |
// метод приватный, потому что это внутрення логика класса, о которой клиент думать не должен | |
void EnsureCapacity() { | |
// если весь резерв памяти исчерпан | |
if (size == capacity) { | |
capacity *= 2; // собираемся увеличить резерв памяти в 2 раза | |
int* temp = new int[capacity]; | |
for (int i = 0; i < size; ++i) { // memcpy_s | |
temp[i] = data[i]; | |
} | |
delete[] data; | |
data = temp; | |
} | |
} | |
public: | |
Vector() : Vector(10) { | |
// cout << "C-TOR WITHOUT PARAMS!\n"; | |
} | |
Vector(unsigned int capacity) { | |
if (capacity < 10) | |
capacity = 10; | |
this->capacity = capacity; | |
data = new int[capacity]; | |
// cout << "C-TOR WITH PARAMS!\n"; | |
} | |
~Vector() { | |
// cout << "DESTRUCTOR!\n"; | |
if (data != nullptr) { | |
delete[] data; | |
data = nullptr; | |
} | |
} | |
unsigned int GetSize() const { | |
return size; | |
} | |
unsigned int GetCapacity() const { | |
return capacity; | |
} | |
// TODO: | |
// перегрузка = | |
// КК | |
void PushBack(int value) { | |
EnsureCapacity(); // проверка, хватит ли места для нового элемента | |
data[size++] = value; | |
} | |
void PushFront(int value) { | |
EnsureCapacity(); | |
for (int i = size; i > 0; --i) // i = 1 | |
data[i] = data[i - 1]; // data[1] = data[0] | |
data[0] = value; | |
size++; | |
} | |
void Clear() { | |
// if (data != nullptr) delete[] data; | |
// capacity = 0; | |
size = 0; | |
} | |
bool IsEmpty() const { | |
return size == 0; | |
} | |
void Print() const { | |
if (IsEmpty()) { | |
cout << "Vector is empty.\n"; | |
return; | |
} | |
for (int i = 0; i < size; ++i) | |
cout << data[i] << " "; | |
cout << "\n"; | |
} | |
// ...остальные методы... | |
}; | |
int main() | |
{ | |
Vector ar; | |
ar.Print(); | |
for (int i = 0; i < 10000; i++) { | |
ar.PushBack(rand() % 100); | |
cout << ar.GetSize() << " - " << ar.GetCapacity() << "\n"; | |
Sleep(1500); | |
} | |
// ar.Print(); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment