Skip to content

Instantly share code, notes, and snippets.

@sunmeat
Created November 6, 2024 18:08
Show Gist options
  • Save sunmeat/e96638d35e22cc2662e8a84c5fcb3819 to your computer and use it in GitHub Desktop.
Save sunmeat/e96638d35e22cc2662e8a84c5fcb3819 to your computer and use it in GitHub Desktop.
vector v.0.1
#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