Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Vector – A Header-Only Dynamic Array Implementation

Цель проекта

Учебная реализация динамического массива (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 или новее.

About

This is a student project aimed at creating a class representing a std::vector using gained knowledge

Topics

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages