Репозиторий является авторской реализацией структуры данных "односвязный список". Проект позволил усовершенствовать навыки работы со связными типами данных и реализации собственных. Также в процессе был реализован простой шаблонный итератор BasicIterator.
template <typename ValueType>
class BasicIterator;
Требуемая версия языка - С++17 и выше. В остальном конкретных требований нет, компилятор подойдет любой: gcc, MinGW, Microsoft Visual C++.
SingleLinkedList - шаблонный класс, использующий в качестве итератора реализованный BasicIterator
.
template <typename Type>
class SingleLinkedList;
Определены псевдонимы типов:
using iterator_category = std::forward_iterator_tag;
using value_type = Type;
using difference_type = std::ptrdiff_t;
using pointer = ValueType*;
using reference = ValueType&;
В конструкторе может принимать:
- Список инициализации
SingleLinkedList(std::initializer_list<Type>);
- Константную ссылку на другой список
SingleLinkedList(const SingleLinkedList&);
Определены методы:
- Конструирование списка из любого другого контейнера, имеющего методы
begin()
иend()
template <typename Container>
SingleLinkedList ConstructList(const Container& cont)
void swap(SingleLinkedList&)
- обменивает значения с другим спискомsize_t GetSize()
- возвращает размера спискаbool IsEmpty()
- возвращает true, если список пустой, false в противном случаеvoid PushFront(const Type&)
- вставляет элемент в начало спискаvoid PopFront()
- удаляет элемент из начала спискаIterator InsertAfter(ConstIterator, const Type&)
- вставляет значение на позицию, переданную первым аргументом. Возвращает итератор на это значениеIterator EraseAfter(ConstIterator)
- удаляет позицию, переданную в качестве аргумента. Возвращает итератор на элемент, следующий за удаленнымvoid Clear()
- очищает списокIterator before_begin()
- возвращает итератор, указывающий на позицию перед первым элементом односвязного списка. Разыменовывать этот итератор нельзя - попытка разыменования приведёт к неопределённому поведению.ConstIterator before_begin()
- возвращает константный итератор, указывающий на позицию перед первым элементом односвязного списка. Разыменовывать этот итератор нельзя - попытка разыменования приведёт к неопределённому поведению.ConstIterator cbefore_begin()
- возвращает константный итератор, указывающий на позицию перед первым элементом односвязного списка. Разыменовывать этот итератор нельзя - попытка разыменования приведёт к неопределённому поведению.Iterator begin()
- возвращает итератор на начало спискаIterator end()
- возвращает итератор на элемент, следующий за последнимConstIterator begin()
- возвращает константный итератор на начало спискаConstIterator end()
- возвращает константный итератор на элемент, следующий за последнимConstIterator cbegin()
- возвращает константный итератор на начало спискаConstIterator cend()
- возвращает константный итератор на элемент, следующий за последним