https://github.com/gleor/cpp-advanced-vector
About Шаблонный вектор из стандартной библиотеки
https://github.com/gleor/cpp-advanced-vector
cpp raii stl-containers template-vector vector
Last synced: 14 days ago
JSON representation
About Шаблонный вектор из стандартной библиотеки
- Host: GitHub
- URL: https://github.com/gleor/cpp-advanced-vector
- Owner: Gleor
- Created: 2024-02-15T21:00:59.000Z (over 2 years ago)
- Default Branch: main
- Last Pushed: 2024-02-15T21:02:59.000Z (over 2 years ago)
- Last Synced: 2025-02-24T01:39:49.110Z (over 1 year ago)
- Topics: cpp, raii, stl-containers, template-vector, vector
- Language: C++
- Homepage:
- Size: 6.84 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# **Vector**
## **Описание**
Упрощённый аналог [вектора](https://en.cppreference.com/w/cpp/container/vector) из стандартной библиотеки. Реализованы базовые методы контейнера, а также написан вспомогательный класс RawMemory для упрощения работы с сырой памятью. Проект создан для того, чтобы на более глубоком уровне понимать внутреннее устройство контейнера из стандартной библиотеки
## **Функционал**
### **Создание экземпляра класса**
**Конструктор по-умолчанию - создаёт пустой вектор**
```cpp
Vector v;
```
**Конструктор с параметром - создаёт вектор заданного размера (заполнен значениями по умолчанию)**
```cpp
Vector v(5);
```
**Копирующий конструктор и перемещающий конструктор**
```cpp
Vector first_vector(5);
Vector second_vector(first_vector);
Vector third_vector(std::move(first_vector));
```
**Операторы копирующего присваивания и перемещающего присваивания**
```cpp
Vector first_vector(5);
Vector second_vector = first_vector;
Vector third_vector = std::move(first_vector);
```
### **Методы**
**Получение информации о ёмкости списка**
```cpp
Vector v(5);
v.Size();
v.Capacity();
```
**Swap - обмен содержимого вектора с другим вектором**
```cpp
Vector first_vector(10);
Vector second_vector(30);
first_vector.Swap(second_vector);
```
**PushBack - добавление элемента в конец вектора**
```cpp
Vector v;
v.PushBack(1);
v.PushBack(2);
```
**PopBack - удаление последнего элемента в векторе**
```cpp
Vector v;
vec.PopBack();
```
**Добавление и удаление элемента в произвольном место вектора**
```cpp
Vector v;
v.Insert(v.begin(), 1);
v.Insert(v.begin(), 2);
v.Erase(v.begin() + 1);
```
**Reserve - резервирование места в векторе под новые элементы**
```cpp
//Резервирование памяти помогает избегать реаллокации
Vector v;
v.Reserve(3);
a.PushBack(1);
a.PushBack(2);
a.PushBack(3); // Реаллокация памяти не произойдёт
```
**Resize - изменение размера вектора**
```cpp
Vector v;
v.PushBack(1);
v.PushBack(2);
v.PushBack(3);
v.Resize(6); // {1, 2, 3, 0, 0, 0}
a.Resize(2); // {1, 2}
```
**Emplace(EmplaceBack) - создание объекта в указанном месте **
Данный метод позволяет добавить элемент в вектор без копирований и перемещений, передавая параметры сразу конструктору
```cpp
Vector v;
v.Emplace(v.begin(), 1);
v.EmplaceBack(2);
```
## **Системные требования**
Компилятор С++ с поддержкой стандарта C++17 или новее
## **Использование**
Для испольования данного класса нужно скопировать файл vector.h в папку с проектом и подключить через директиву #include "vector.h"