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
Get step-by-step solutions from verified subject matter experts
