#pragma once struct NodeT; using ItemT = int; class ListT { public: ListT(){}; ListT(const ListT & other) = delete; ListT(ListT && other) = delete; ListT & operator =(const ListT & other) = delete; ListT & operator =(ListT && other) = delete; ~ListT(); size_t Size(); void PushFront(ItemT i); void PopFront(); class ListIteratorT{ public: friend class ListT; ListIteratorT(NodeT *); ItemT & operator*(); ListIteratorT & operator++(); ListIteratorT operator +(size_t); bool operator == (const ListIteratorT &); bool operator != (const ListIteratorT &); private: NodeT * value{nullptr}; }; ListIteratorT InsertNext(ListIteratorT i, ItemT data); ListIteratorT DeleteNext(ListIteratorT i); ListIteratorT Begin(); ListIteratorT End(); private: NodeT * head{nullptr}, * tail{nullptr}; size_t size{0}; };