list which can be reversed in O(1). More...
#include <GTL/symlist.h>
Template Form:
template <class T> symlist
The problem with the STL class list - as with most doubly linked lists -- is that isn't possible to turn it in constant time, because each entry in the list contains next and prev pointer and turning the list means to switch these two in each element in the list. Another point is the splice operation in STL lists, which is constant time, but for the same reason as mentioned above it is not possible to splice a list in reverse order into another in constant time.
The problems arise from the fact that each element "knows" what its next and previous elements are. An element in a symlist only knows what its neighbors are, what is next and what previous depends on the direction of iteration. This of course imposes some overhead in iteration (one if-statement) but allows reversion and a splice in reversed order in constant time.
[public]
Creates empty symlist.
[public]
Makes the created list a copy of li
.
li | symlist. |
[public]
Assignes li
to this list. Note: all elements in this
list will be deleted.
li |
[public]
Destructor
[public]
Checks whether list is empty. Takes constant time.
[public]
First element in list. Assumes that list ins't empty.
[public]
Last element in list. Assumes that list ins't empty.
[public]
Start iteration through elements of list
[public]
End of iteration through elements of list
[public]
Start iteration through elements of list
[public]
End of iteration through elements of list
[public]
Start iteration through element of list in reverse order
[public]
End of iteration through elements of list in reverse order
[public]
Start iteration through element of list in reverse order
[public]
End of iteration through elements of list in reverse order
[public]
Inserts data
before pos
in list.
data | element to be inserted |
pos | position |
[public]
Inserts the element it
points to before pos
into this list. It is assumed that the element it
refers
lies in a different list. All iterators to elements in either of the
two lists stay valid. Takes constant time.
pos | position |
it | position of element to be inserted |
[public]
Inserts the elements [it,end)
refers to before pos
into this list. It is assumed that [it,end)
lies in a different list. All iterators to elements in either of the
two lists stay valid. Takes constant time.
pos | position |
it | position of one-past the last element to be inserted |
[public]
Deletes element at position pos
from list.
pos | position to be deleted |
[public]
Deletes the elements [it, end)
from list.
end | one-past the last position to be deleted |
it | first position to be deleted |
[public]
Change the direction of list. Takes constant time.
Kdoc |