#ifndef DOUBLY_LINKED_LIST_IMPL_ #define DOUBLY_LINKED_LIST_IMPL_ #include template class DoublyLinkedList { private: struct DLListNode {}; using Node = DLListNode; Node* head; Node* tail; void copy(const DoublyLinkedList& other); void free(); class Iterator { private: Node* current; Iterator(Node* c) {} public: Iterator& operator++() {} Iterator operator++(int) {} Iterator& operator--() {} Iterator operator--(int) {} const T& operator*() {} bool operator==(const Iterator& other) const {} bool operator!=(const Iterator& other) const {} friend class DoublyLinkedList; }; public: DoublyLinkedList(); DoublyLinkedList(const DoublyLinkedList&); DoublyLinkedList& operator=(const DoublyLinkedList&); DoublyLinkedList(DoublyLinkedList&&); DoublyLinkedList& operator=(DoublyLinkedList&&); void pushBack(const T&); void popBack(); void pushFront(const T&); void popFront(); bool empty() const; const T& back() const; const T& front() const; Iterator begin(); Iterator end(); void insert(Iterator at, const T& elem); ~DoublyLinkedList(); }; #endif