12 #ifndef __dLinkListIncluded
13 #define __dLinkListIncluded
48 node *
move(
int i)
const;
127 virtual void clear();
128 virtual int length()
const;
129 virtual void insert(
int i,
const T &obj);
130 virtual void remove(
int i);
131 virtual int search(
const T &obj)
const;
132 virtual T
visit(
int i)
const;
133 virtual void traverse()
const =
delete;
145 virtual iterator
end() {
return iterator(
tail); }
146 virtual const_iterator
end()
const {
return iterator(
tail); }
175 : head(new node()), tail(new node()), currentLength(0)
183 : head(rvalue.head), tail(rvalue.tail), currentLength(rvalue.currentLength)
185 rvalue.tail = rvalue.head =
nullptr;
192 for (const_iterator i = rhs.
begin(); i != rhs.
end(); ++i)
201 std::swap(currentLength, rvalue.currentLength);
208 return currentLength;
215 for (
int k = 0; k <= i; ++k)
226 pos->prev = pos->prev->next =
new node(obj, pos->prev, pos);
234 node *delp = move(i);
236 delp->prev->next = delp->next;
237 delp->next->prev = delp->prev;
249 node *p = head->next, *q;
267 node *p = head->next;
285 return move(i)->data;
306 tail->prev = tail->prev->next =
new node(obj, tail->prev, tail);
312 tail->prev = tail->prev->next =
new node(std::move(obj), tail->prev, tail);
319 node *delPtr = tail->prev;
320 delPtr->prev->next = tail;
321 tail->prev = delPtr->prev;