Question: I need help on custom STL list. Using C++ Data should be in between Head and Tail which means Head, Tail = nullptr. PushFront: Add

I need help on custom STL list. Using C++

Data should be in between Head and Tail which means Head, Tail = nullptr.

PushFront: Add a new node as the new first piece of data. Do NOT add anything before Head.

PopFront: Remove the first piece of data if there is one.

Front: Return the first piece of data.

*Back: Those same three, except to the end. Do NOT add anything after Tail.

Size: How many things.

Clear: Remove all data, leave head and tail.

At: Return data at that position. 0 is first data

Erase: Delete the node at this iterator, if it exists

Insert: Insert data after this iterator. Do not allow inserting after tail!

Begin: Iterator to first data

End: Iterator after last data (remember Unspecified Behavior)

Iterator::GetData: Return the T from this node

Iterator::Next: Move iterator to the next node

Iterator::IsEqual: Are these pointing to the same node?

#pragma once template class List { struct ListNode { ListNode() { } T mData; ListNode *mPrev; ListNode *mNext; };

ListNode *mHead; ListNode *mTail;

public: List() { // Getting Head and Tail correct is not part of the Big 3. It is hella mega required no matter what. //mHead = nullptr; //mTail = nullptr;// bleh. Full of crash. mHead = new ListNode; mTail = new ListNode; mHead->mNext = mTail; mHead->mPrev = nullptr; mTail->mPrev = mHead;// This RULES. We always know we have 2 nodes, so we never have to check for null. mTail->mNext = nullptr; } List(const List & tOther) { } List & operator = (const List & tRHS) { } ~List() { }

void PushFront(const T &tWhat) { } void PopFront() { } T& Front() { }

void PushBack(const T &tWhat) { } void PopBack() { } T& Back() { }

int Size() const { } void Clear() { }

T& At(int tWhere) const { }

/////////////////////////////////////////////////////////////////// // Iterators class Iterator { ListNode *mCurrent; public: Iterator(ListNode *tStart) { } T& GetData() { } void Next()// As in "Move to the next item please". { } bool IsEqual(const Iterator &rhs) { } };

Iterator Insert(Iterator tWhere, const T &tWhat) { } Iterator Erase(Iterator tWhat) { } Iterator Begin() { // First good data } Iterator End() { // First Bad data } };

Step by Step Solution

There are 3 Steps involved in it

1 Expert Approved Answer
Step: 1 Unlock blur-text-image
Question Has Been Solved by an Expert!

Get step-by-step solutions from verified subject matter experts

Step: 2 Unlock
Step: 3 Unlock

Students Have Also Explored These Related Databases Questions!