Лабораторная работа заключается в написании на языке C++ системы для линейной организации данных с помощью динамического массива, связанного списка и последовательности (АТД последовательность предоставляет унифицированный доступ к двум другим)
- С++20 и выше (Использование концептов при реализации BitSequence)
- GoogleTest (Тестирование программы)
- wxWidgets (Реализация графического интерфейса)
- СMake (Опционально, для сборки)
| Структура | Описание |
|---|---|
| DynamicArray<T> | Динамический массив |
| LinkedList<T> | Двусвязный список |
| Структура | Описание |
|---|---|
| ArraySequence<T> | Реализация последовательности на основе динамического массива |
| ListSequence<T> | Реализация последовательности на основе двусвязного списка |
| BitSequence | Специализация для работы с битовой последовательностью |
| Сигнатура | Описание работы метода | Примечание |
|---|---|---|
| <...>Sequence() | Конструктор по умолчанию | |
| <...>Sequence(T* items, size_t count) | Конструктор из массива | |
| <...>Sequence(const <...>Sequence<T>& sequence) | Копирующий конструктор | |
| T get_first() const | Получить первый элемент последовательности | Может выбрасывать исключение, если последовательность пуста |
| T get_last() const | Получить последний элемент последовательности | Может выбрасывать исключение, если последовательность пуста |
| T get(size_t index) const | Получить элемент по индексу | Может выбрасывать исключение, если индекс некорректен |
| size_t get_length() const | Получить длину последовательности | |
| Sequence<T>* get_subsequence(size_t start_index, size_t end_index) | Получить подпоследовательность по индексам | Может выбрасывать исключения, если start_index > end_index или индексы некорректны |
| Sequence<T>* append(T temp) | Добавить элемент в конец последовательности | |
| Sequence<T>* prepend(T temp) | Добавить элемент в начало последовательности | |
| Sequence<T>* insert_at(T temp, size_t index) | Добавить элемент по индексу | Может выбрасывать исключение, если индекс некорректен |
| Sequence<T>* concat(Sequence<T>* sequence) const | Конкатенация последовательностей | Всегда возвращает новую последовательность |
| void clear() | Очистка Sequence |
Графический интерфейс реализован на основе библиотеки wxWidgets На актуальный момент он предоставляет возможность работы с 4 объектами класса Sequence (2 ListSequence, 2 ArraySequence) Доступные операции:
- Вставка в конец
- Вставка в начало
- Вставка по индексу
- Получение длины последовательности
- Получение элемента по индексу
- Очистка последовательности
- Конкатенация (активная + целевая)
- Получение подпоследовательности Две последние операции создают временный объект в поле вывода
В лабораторной работе реализовано модульное тестирование функционала библиотеки при помощи Google Test На данный момент протестированы
- DynamicArray
- LinkedList
- ArraySequence
- ListSequence
- BitSequence Суммарно написан 121 тест
Проект собирается модульно при помощи CMake
Модули тестирования и графического интерфейса собираются отдельно