// Derive your class from this struct to insert to a linked list. template <class Tag= void> struct ilist_node
{ #ifndef DBUG_OFF
ilist_node() noexcept : next(NULL), prev(NULL) {} #else
ilist_node() = default; #endif
// Modelled after std::list<T> template <class T, class Tag= void> class ilist
{ public: typedef ilist_node<Tag> ListNode; class Iterator;
// All containers in C++ should define these types to implement generic // container interface. typedef T value_type; typedef std::size_t size_type; typedef std::ptrdiff_t difference_type; typedef value_type &reference; typedefconst value_type &const_reference; typedef T *pointer; typedefconst T *const_pointer; typedef Iterator iterator; typedef Iterator const_iterator; /* FIXME */ typedef std::reverse_iterator<iterator> reverse_iterator; typedef std::reverse_iterator<const iterator> const_reverse_iterator;
class Iterator
{ public: // All iterators in C++ should define these types to implement generic // iterator interface. typedef std::bidirectional_iterator_tag iterator_category; typedef T value_type; typedef std::ptrdiff_t difference_type; typedef T *pointer; typedef T &reference;
// STL version is O(n) but this is O(1) because an element can't be inserted // several times in the same ilist. void remove(reference value) noexcept { erase(iterator(&value)); }
private:
ListNode sentinel_;
};
// Similar to ilist but also has O(1) size() method. template <class T, class Tag= void> class sized_ilist : public ilist<T, Tag>
{ typedef ilist<T, Tag> BASE;
public: // All containers in C++ should define these types to implement generic // container interface. typedef T value_type; typedef std::size_t size_type; typedef std::ptrdiff_t difference_type; typedef value_type &reference; typedefconst value_type &const_reference; typedef T *pointer; typedefconst T *const_pointer; typedeftypename BASE::Iterator iterator; typedefconsttypename BASE::Iterator const_iterator; typedef std::reverse_iterator<iterator> reverse_iterator; typedef std::reverse_iterator<const iterator> const_reverse_iterator;
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.