Учебная реализация динамического массива (Vector) на C++, аналога std::vector,
написанная с нуля для отработки практики ручного управления памятью, итераторов,
exception safety и обобщённого программирования (шаблонов) в C++.
- Header-only — весь контейнер реализован в одном заголовочном файле, компиляция не требуется, достаточно
#include. - Ручное управление памятью:
operator new/operator delete, placement new, явный вызов деструкторов. - Поддержка итераторов: прямые, константные, обратные и константные обратные итераторы (совместимые с STL-алгоритмами).
- Exception safety в конструкторах, копирующих/перемещающих операциях и модификаторах.
- Управление ёмкостью:
Reserve,ShrinkToFit,Resize, стратегия удвоения ёмкости. - Доступ к элементам:
At(с проверкой границ),Front,Back,Data,operator[]. - Модификаторы:
PushBack,PopBack,EmplaceBack,Clear,Swap. - Операторы сравнения:
==,!=,<,<=,>,>=. - RAII: корректные деструктор, конструкторы/операторы копирования и перемещения.
vector/
├── CMakeLists.txt # сборка тестового исполняемого файла
├── README.md
├── src/
│ └── Vector.h # header-only реализация контейнера Vector
└── tests/
├── catch.h # заголовок фреймворка Catch2 (single header)
└── vector_public_test.cpp # публичные тесты контейнера
git clone <URL-репозитория> vector
cd vectorТребуется CMake ≥ 3.10 и компилятор с поддержкой C++20.
cmake -B build -S .
cmake --build build
./build/vector_public_testЛибо через ctest:
ctest --test-dir buildТак как проект header-only, достаточно скопировать src/Vector.h в свой include-путь:
#include "Vector.h"
#include <iostream>
int main() {
Vector<int> v;
v.PushBack(10);
v.PushBack(20);
v.EmplaceBack(30);
for (auto &el : v) {
std::cout << el << " ";
}
// Вывод: 10 20 30
}Требования: компилятор с поддержкой C++17 или новее.