Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
Разработка программного обеспечения

Class template slist

Boost , The Boost C++ Libraries BoostBook Documentation Subset , Reference

Boost C++ Libraries

...one of the most highly regarded and expertly designed C++ library projects in the world. Herb Sutter and Andrei Alexandrescu, C++ Coding Standards

PrevUpHomeNext

Class template slist

boost::intrusive::slist

Synopsis

// In header: <boost/intrusive/slist.hpp>
template<typename T, class... Options> 
class slist {
public:
  // types
  typedef ValueTraits                                value_traits;      
  typedef value_traits::pointer                      pointer;           
  typedef value_traits::const_pointer                const_pointer;     
  typedef pointer_traits< pointer >::element_type    value_type;        
  typedef pointer_traits< pointer >::reference       reference;         
  typedef pointer_traits< const_pointer >::reference const_reference;   
  typedef pointer_traits< pointer >::difference_type difference_type;   
  typedef SizeType                                   size_type;         
  typedef slist_iterator< value_traits, false >      iterator;          
  typedef slist_iterator< value_traits, true >       const_iterator;    
  typedef value_traits::node_traits                  node_traits;       
  typedef node_traits::node                          node;              
  typedef node_traits::node_ptr                      node_ptr;          
  typedef node_traits::const_node_ptr                const_node_ptr;    
  typedef unspecified                                header_holder_type;
  typedef unspecified                                node_algorithms;   
  // construct/copy/destruct
  slist();
  explicit slist(const value_traits &);
  template<typename Iterator> 
    slist(Iterator, Iterator, const value_traits & = value_traits());
  slist(slist &&);
  slist & operator=(slist &&);
  ~slist();
  // public member functions
  void clear();
  template<typename Disposer> void clear_and_dispose(Disposer);
  void push_front(reference);
  void push_back(reference);
  void pop_front();
  template<typename Disposer> void pop_front_and_dispose(Disposer);
  reference front();
  const_reference front() const;
  reference back();
  const_reference back() const;
  iterator begin();
  const_iterator begin() const;
  const_iterator cbegin() const;
  iterator end();
  const_iterator end() const;
  const_iterator cend() const;
  iterator before_begin();
  const_iterator before_begin() const;
  const_iterator cbefore_begin() const;
  iterator last();
  const_iterator last() const;
  const_iterator clast() const;
  size_type size() const;
  bool empty() const;
  void swap(slist &);
  void shift_backwards(size_type = 1);
  void shift_forward(size_type = 1);
  template<typename Cloner, typename Disposer> 
    void clone_from(const slist &, Cloner, Disposer);
  template<typename Cloner, typename Disposer> 
    void clone_from(slist &&, Cloner, Disposer);
  iterator insert_after(const_iterator, reference);
  template<typename Iterator> 
    void insert_after(const_iterator, Iterator, Iterator);
  iterator insert(const_iterator, reference);
  template<typename Iterator> void insert(const_iterator, Iterator, Iterator);
  iterator erase_after(const_iterator);
  iterator erase_after(const_iterator, const_iterator);
  iterator erase_after(const_iterator, const_iterator, size_type);
  iterator erase(const_iterator);
  iterator erase(const_iterator, const_iterator);
  iterator erase(const_iterator, const_iterator, size_type);
  template<typename Disposer> 
    iterator erase_after_and_dispose(const_iterator, Disposer);
  template<typename Disposer> 
    iterator erase_after_and_dispose(const_iterator, const_iterator, Disposer);
  template<typename Disposer> 
    iterator erase_and_dispose(const_iterator, Disposer);
  template<typename Disposer> 
    iterator erase_and_dispose(const_iterator, const_iterator, Disposer);
  template<typename Iterator> void assign(Iterator, Iterator);
  template<typename Iterator, typename Disposer> 
    void dispose_and_assign(Disposer, Iterator, Iterator);
  void splice_after(const_iterator, slist &, const_iterator * = 0);
  void splice_after(const_iterator, slist &, const_iterator);
  void splice_after(const_iterator, slist &, const_iterator, const_iterator);
  void splice_after(const_iterator, slist &, const_iterator, const_iterator, 
                    size_type);
  void splice(const_iterator, slist &, const_iterator * = 0);
  void splice(const_iterator, slist &, const_iterator);
  void splice(const_iterator, slist &, const_iterator, const_iterator);
  void splice(const_iterator, slist &, const_iterator, const_iterator, 
              size_type);
  template<typename Predicate> void sort(Predicate);
  void sort();
  template<typename Predicate> 
    void merge(slist &, Predicate, const_iterator * = 0);
  void merge(slist &);
  void reverse();
  void remove(const_reference);
  template<typename Disposer> 
    void remove_and_dispose(const_reference, Disposer);
  template<typename Pred> void remove_if(Pred);
  template<typename Pred, typename Disposer> 
    void remove_and_dispose_if(Pred, Disposer);
  void unique();
  template<typename BinaryPredicate> void unique(BinaryPredicate);
  template<typename Disposer> void unique_and_dispose(Disposer);
  template<typename BinaryPredicate, typename Disposer> 
    void unique_and_dispose(BinaryPredicate, Disposer);
  iterator iterator_to(reference);
  const_iterator iterator_to(const_reference) const;
  iterator previous(iterator);
  const_iterator previous(const_iterator) const;
  iterator previous(const_iterator, iterator);
  const_iterator previous(const_iterator, const_iterator) const;
  void check() const;
  // public static functions
  static slist & container_from_end_iterator(iterator);
  static const slist & container_from_end_iterator(const_iterator);
  static iterator s_iterator_to(reference);
  static const_iterator s_iterator_to(const_reference);
  // private member functions
  void priv_splice_after(const node_ptr &, slist &, const node_ptr &, 
                         const node_ptr &);
  void priv_incorporate_after(const node_ptr &, const node_ptr &, 
                              const node_ptr &);
  void priv_reverse(unspecified);
  void priv_reverse(unspecified);
  void priv_shift_backwards(size_type, unspecified);
  void priv_shift_backwards(size_type, unspecified);
  void priv_shift_forward(size_type, unspecified);
  void priv_shift_forward(size_type, unspecified);
  // private static functions
  static void priv_swap_cache_last(slist *, slist *);
  static void priv_swap_lists(const node_ptr &, const node_ptr &, unspecified);
  static void priv_swap_lists(const node_ptr &, const node_ptr &, unspecified);
  static slist & priv_container_from_end_iterator(const const_iterator &);
  // public data members
  static const bool constant_time_size;
  static const bool stateful_value_traits;
  static const bool linear;
  static const bool cache_last;
  static const bool has_container_from_iterator;
};

Description

Список шаблонов классов представляет собой навязчивый контейнер, который инкапсулирует список, связанный по отдельности. Вы можете использовать такой список, чтобы выжать последний бит производительности из вашего приложения. К сожалению, небольшие выгоды приходят с некоторыми огромными недостатками. Многие функции не могут быть реализованы так же эффективно, как для стандартных контейнеров. Чтобы преодолеть это ограничение, необходимо ввести некоторые другие функции с довольно необычной семантикой.

Параметр шаблона<T>— это тип, которым должен управлять контейнер. Пользователь может указать дополнительные опции и, если опции не предусмотрены, используются опции по умолчанию.

Контейнер поддерживает следующие варианты:<base_hook<>/member_hook<>/value_traits<>>,<constant_time_size<>>,<size_type<>>,<linear<>>и<cache_last<>>.

Итераторы списков являются передовыми итераторами. slist предоставляет статическую функцию, называемую «предыдущей», для вычисления предыдущего итератора данного итератора. Эта функция имеет линейную сложность. Для улучшения удобства использования esp. с функциями '*_after' определены ++end() == start() и previous(begin()) == end(). Определена новая специальная функция «before_begin()», которая возвращает итератор, который указывает на один пункт меньше начала списка: ++before_begin() == start()

slist public construct/copy/destruct

  1. <
    slist();
    >

    Эффекты: Составляет пустой список.

    Сложность: Постоянная

    Бросает: Если value_traits::node_traits::node конструктор бросает (это не происходит с заранее заданными Boost.Intrusive крючками).

  2. <
    explicitslist(constvalue_traits&v_traits);
    >

    Эффекты: Составляет пустой список.

    Сложность: Постоянство

    Бросает: Если value_traits::node_traits::node конструктор бросает (это не происходит с заранее заданными Boost.Intrusive крючками).

  3. <
    template<typenameIterator>
     slist(Iteratorb,Iteratore,
           constvalue_traits&v_traits=value_traits());
    >

    Требуется: Отклоняющий итератор должен давать значение l типа value_type.

    Эффекты: Составляет список, равный [b,e].

    Сложность: Линейное расстояние (b, e). Копирование конструкторов не называется.

    Бросает: Если value_traits::node_traits::node конструктор бросает (это не происходит с заранее заданными Boost.Intrusive крючками).

  4. <
    slist(slist&&x);
    >

    Эффекты: делать

  5. <
    slist&operator=(slist&&x);
    >

    Эффекты: делать

  6. <
    ~slist();
    >

    Эффекты: Если это значение безопасного режима или автоматического разъединения, деструктор ничего не делает (т.е. код не генерируется). В противном случае он отделяет от этого все элементы. При этом объекты в списке не удаляются (т.е. не называются деструкторы), но крючки по параметру шаблона<value_traits>задаются на их значение по умолчанию.

    Сложность: Линейный по количеству элементов в списке, если это безопасное или автоматическое значение разъединения. В противном случае постоянная.

slist public member functions

  1. <
    voidclear();
    >

    Эффекты: Стирает все элементы контейнера.

    Бросает: Ничего.

    Сложность: Линейный по количеству элементов списка. Если это безопасный режим или авто-разъединить значение_тип. Постоянное время иначе.

    Примечание: Инвалидирует итераторы (но не ссылки) на стертые элементы.

  2. <
    template<typenameDisposer>voidclear_and_dispose(Disposerdisposer);
    >

    Требуется: Диспетчер::оператор()(указатель) не должен бросать.

    Эффекты: Стирает все элементы контейнера Утилизатор::оператор()(указатель) вызывается для удаленных элементов.

    Бросок: Ничего.

    Сложность: Линейное число элементов списка.

    Примечание: Инвалидирует итераторы на стертые элементы.

  3. <
    voidpush_front(referencevalue);
    >

    Требуется: Значение должно быть lvalue.

    Эффекты: Вставляет значение в передней части списка. Копирование конструкторов не называется.

    Бросок: Ничего.

    Сложность: Постоянная.

    Примечание: Не влияет на достоверность итераторов и ссылок.

  4. <
    voidpush_back(referencevalue);
    >

    Требуется:

    Эффекты: Вставьте значение в заднюю часть списка. Никаких конструкторов копий.

    Броски: Ничего.

    Сложность: Константа.

    Примечание: Не влияет на достоверность итераторов и ссылок. Данная функция доступна только в cache_last<>.

  5. <
    voidpop_front();
    >

    Эффекты: Стирает первый элемент списка. Разрушители не называются.

    Броски: Ничего.

    Сложность: Константа.

    Примечание: Инвалидирует итераторы (но не ссылки) на стертый элемент.

  6. <
    template<typenameDisposer>voidpop_front_and_dispose(Disposerdisposer);
    >

    Требует: Диспетчер::оператор()(указатель) не должен бросать.

    : Стирает первый элемент списка. Диспозитор::оператор()(указатель) вызывается для удаленного элемента.

    Бросок: Ничего.

    Сложность: Постоянная.

    Примечание: Инвалидирует итераторы к стертому элементу.

  7. <
    referencefront();
    >

    Эффекты: Возвращает ссылку на первый элемент списка.

    Бросок: Ничего.

    Сложность: Постоянная.

  8. <
    const_referencefront()const;
    >

    Эффекты: Возвращает ссылку на первый элемент списка.

    Бросает: Ничего.

    Сложность: Постоянная.

  9. <
    referenceback();
    >

    Эффекты: Возвращает ссылку на последний элемент списка.

    Бросок: Ничего.

    Сложность: Постоянная.

    Примечание: Не влияет на достоверность итераторов и ссылок. Данная функция доступна только в cache_last<>.

  10. <
    const_referenceback()const;
    >

    Эффекты: Возвращает ссылку на последний элемент списка.

    Бросок: Ничего.

    Сложность: Постоянная.

    Примечание: Не влияет на достоверность итераторов и ссылок. Данная функция доступна только в cache_last<>.

  11. <
    iteratorbegin();
    >

    Эффекты: Возвращает итератор к первому элементу, содержащемуся в списке.

    Бросок: Ничего.

    Сложность: Постоянная.

  12. <
    const_iteratorbegin()const;
    >

    Эффекты: Возвращает const_iterator к первому элементу, содержащемуся в списке.

    Бросает: Ничего.

    Сложность: Постоянная.

  13. <
    const_iteratorcbegin()const;
    >

    Эффекты: Возвращает const_iterator к первому элементу в списке.

    Броски: Ничего.

    Сложность: Постоянная.

  14. <
    iteratorend();
    >

    Эффекты: Возвращает итератор в конец списка.

    Бросает: Ничего.

    Сложность: Постоянная.

  15. <
    const_iteratorend()const;
    >

    Эффекты: Возвращает const_iterator в конец списка.

    Бросает: Ничего.

    Сложность: Постоянно.

  16. <
    const_iteratorcend()const;
    >

    Эффекты: Возвращает const_iterator в конец списка.

    Бросает: Ничего.

    Сложность: Постоянная.

  17. <
    iteratorbefore_begin();
    >

    Эффекты: Возвращает итератор, который указывает на положение перед первым элементом. Эквивалент "end()"

    Бросает: Ничего.

    Сложность: Постоянно.

  18. <
    const_iteratorbefore_begin()const;
    >

    Эффекты: Возвращает итератор, который указывает на положение перед первым элементом. Эквивалент "end()"

    Бросок: Ничего.

    Сложность: Постоянная.

  19. <
    const_iteratorcbefore_begin()const;
    >

    Эффекты: Возвращает итератор, который указывает на положение перед первым элементом.

    Бросок:

    Сложность: Постоянная.

  20. <
    iteratorlast();
    >

    Эффекты: Возвращает итератор к последнему элементу, содержащемуся в списке.

    Бросок: Ничего.

    Сложность: Постоянная.

    Примечание: Эта функция присутствует только в том случае, если опция cached_last<>верна.

  21. <
    const_iteratorlast()const;
    >

    Эффекты: Возвращает const_iterator к последнему элементу списка.

    Бросок: Ничего.

    Сложность: Постоянная.

    Примечание: Эта функция присутствует только в том случае, если опция cached_last<>верна.

  22. <
    const_iteratorclast()const;
    >

    Эффекты: Возвращает const_iterator к последнему элементу, содержащемуся в списке.

    Бросает: Ничего.

    Сложность: Постоянная.

    Примечание: Эта функция присутствует только в том случае, если опция cached_last<>верна.

  23. <
    size_typesize()const;
    >

    Эффекты: Возвращает количество элементов, содержащихся в списке.

    Бросок: Ничего.

    Сложность: Линейное число элементов, содержащихся в списке, если<constant_time_size>является ложным. Постоянное время иначе.

    Примечание: Не влияет на достоверность итераторов и ссылок.

  24. <
    boolempty()const;
    >

    Эффекты: Возвращается, если список не содержит элементов.

    Бросает: Ничего.

    Сложность: Постоянная.

    Примечание: Не влияет на достоверность итераторов и ссылок.

  25. <
    voidswap(slist&other);
    >

    Эффекты: Перемещает элементы x и *это.

    Бросает: Ничего.

    Сложность: Линейный по количеству элементов обоих списков. Постоянное время, если используются опции линейный<>и/или cache_last<>

    Примечание: Не влияет на достоверность итераторов и ссылок.

  26. <
    voidshift_backwards(size_typen=1);
    >

    Эффекты: Перемещает все элементы назад, так что первый элемент становится вторым, второй становится третьим... последний элемент становится первым.

    Бросает: Ничего.

    Сложность: Линейный к числу элементов плюс число сдвигов.

    Примечание: итераторы Не влияет на достоверность итераторов и ссылок.

  27. <
    voidshift_forward(size_typen=1);
    >

    Эффекты: Перемещает вперед все элементы, так что второй элемент становится первым, третий становится вторым... первый элемент становится последним.

    Бросает: Ничего.

    Сложность: Линейный к числу элементов плюс число сдвигов.

    Примечание: Не влияет на достоверность итераторов и ссылок.

  28. <
    template<typenameCloner,typenameDisposer>
     voidclone_from(constslist&src,Clonercloner,Disposerdisposer);
    >

    Требует: Диспетчер::оператор()(поинт) не должен бросать. Клонер должен уступить узлам, эквивалентным исходным узлам.

    Эффекты: Стирает все элементы из *этого вызывающего Диспозитора::оператор()(указатель), клонирует все элементы из src, вызывающего Клонера::оператор()(const_reference) и вставляет их на *это.

    Если клонер бросает, все клонированные элементы несвязаны и расположены, вызывая Диспозитор::оператор()(указатель).

    Сложность: Линейный стертый плюс вставленные элементы.

    Бросок: Если клонер бросит.

  29. <
    template<typenameCloner,typenameDisposer>
     voidclone_from(slist&&src,Clonercloner,Disposerdisposer);
    >

    Требует: Диспетчер::оператор()(поинт) не должен бросать. Клонер должен уступить узлам, эквивалентным исходным узлам.

    Эффекты: Стирает все элементы из *этого вызывающего Диспозитора::оператор()(указатель), клонирует все элементы из src, вызывающего Клонера::оператор()(ссылка) и вставляет их на *это.

    Если клонер бросает, все клонированные элементы несвязаны и расположены, вызывая Диспозитор::оператор()(указатель).

    Сложность: Линейный стертый плюс вставленные элементы.

    Бросок: Если клонер бросит.

  30. <
    iteratorinsert_after(const_iteratorprev_p,referencevalue);
    >

    Требуется: Значение должно быть lvalue и prev_p должно указывать на элемент, содержащийся в списке, или на конец ().

    Эффекты: Вставляет значение после позиции, указанной prev_p. Ни один конструктор копий не называется.

    Возвращение: Итератор для вставленного элемента.

    Бросок: Ничего.

    Сложность: Константа.

    Примечание: Не влияет на достоверность итераторов и ссылок.

  31. <
    template<typenameIterator>
     voidinsert_after(const_iteratorprev_p,Iteratorf,Iteratorl);
    >

    Требуется: Отклоняющийся итератор должен давать значение l типа value_type, а prev_p должен указывать на элемент, содержащийся в списке, или на конечный узел.

    Эффекты: Вставляет [f, l] после позиции prev_p.

    Бросает: Ничего.

    Сложность: Линейное число вставленных элементов

    Примечание: Не влияет на достоверность итераторов и ссылок.

  32. <
    iteratorinsert(const_iteratorp,referencevalue);
    >

    Требуется: Значение должно быть значением l и p должно указывать на элемент, содержащийся в списке, или на конец ().

    Эффекты: Вставляет значение перед позицией, указанной p. Ни один конструктор копий не называется.

    Бросок: Ничего.

    Сложность: Линейное число элементов до p. Постоянное время, если cache_last<>истинно и p == конец().

    Примечание: Не влияет на достоверность итераторов и ссылок.

  33. <
    template<typenameIterator>
     voidinsert(const_iteratorp,Iteratorb,Iteratore);
    >

    Требуется: Ссылочный итератор должен давать значение l типа value_type и p должен указывать на элемент, содержащийся в списке, или на конечный узел.

    Эффекты: Вставляется точка b и e перед положением p. Ни один конструктор копий не называется.

    Броски: Ничего.

    Сложность: Линейный к числу вставленных элементов плюс линейный к элементам перед b. Линейный к числу элементов для вставки, если опция cache_last<>верна и p == конец().

    Примечание: Не влияет на достоверность итераторов и ссылок.

  34. <
    iteratorerase_after(const_iteratorprev);
    >

    Эффекты: Стирает элемент после элемента, указанного в предварительном списке. Деструкторы не называются.

    Возвращает: первый элемент, остающийся за пределами удаленных элементов, или конец(), если такой элемент не существует.

    Бросок: Ничего.

    Сложность: Константа.

    Примечание: Инвалидирует итераторы (но не ссылки) на стертый элемент.

  35. <
    iteratorerase_after(const_iteratorbefore_f,const_iteratorl);
    >

    Эффекты: Стирает диапазон (до _f, l) из списка. Деструкторы не называются.

    Возвращает: первый элемент, остающийся за пределами удаленных элементов, или конец(), если такой элемент не существует.

    Бросок: Ничего.

    Сложность: Линейное количество стертых элементов, если это безопасный режим, активируется значение автоотсоединения или постоянный размер времени. Постоянное время иначе.

    Примечание: Инвалидирует итераторы (но не ссылки) на стертый элемент.

  36. <
    iteratorerase_after(const_iteratorbefore_f,const_iteratorl,size_typen);
    >

    Эффекты: Стирает диапазон (до _f, l) из списка. n должно быть расстоянием (до _f, l) - 1. Деструкторы не называются.

    Возвращение: первый элемент, остающийся за пределами удаленных элементов, или конец (), если такой элемент не существует.

    Бросок: Ничего.

    Сложность: Постоянное время, если<link_mode>нормально. Линейные элементы (l - до _f) иначе.

    Примечание: Инвалидирует итераторы (но не ссылки) на стертый элемент.

  37. <
    iteratorerase(const_iteratori);
    >

    Эффекты: Стирает элемент, указанный i в списке. Деструкторы не называются.

    Возвращает: первый элемент, остающийся за пределами удаленного элемента, или конец(), если такой элемент не существует.

    Бросок: Ничего.

    Сложность: Линейные элементы перед i.

    Примечание: Инвалидирует итераторы (но не ссылки) на стертый элемент.

  38. <
    iteratorerase(const_iteratorf,const_iteratorl);
    >

    Требуется: f и l должны быть действительными итераторами для элементов в этом.

    Эффекты: Стирает диапазон, указанный b и e. Деструкторы не называются.

    Возвращение: первый элемент, остающийся за пределами удаленных элементов, или конец (), если такой элемент не существует.

    Бросок: Ничего.

    Сложность: Линейные элементы до l.

    Примечание: Инвалидирует итераторы (но не ссылки) на стертые элементы.

  39. <
    iteratorerase(const_iteratorf,const_iteratorl,size_typen);
    >

    Эффекты: Стирает диапазон [f, l] из списка. n должно быть расстоянием f, l. Деструкторы не называются.

    Возвращение: первый элемент, остающийся за пределами удаленных элементов, или конец (), если такой элемент не существует.

    Бросок: Ничего.

    Сложность: линейная по отношению к элементам до f, если<link_mode>является нормальной_ссылкой и<constant_time_size>активируется. Линейный к элементам до l иначе.

    Примечание: Инвалидирует итераторы (но не ссылки) на стертый элемент.

  40. <
    template<typenameDisposer>
     iteratorerase_after_and_dispose(const_iteratorprev,Disposerdisposer);
    >

    Требует: Диспетчер::оператор()(указатель) не должен бросать.

    Эффекты: Стирает элемент после элемента, указанного в предварительном списке. Диспозитор::оператор()(указатель) вызывается для удаленного элемента.

    Возвращение: первый элемент, остающийся за пределами удаленных элементов, или конец (), если такой элемент не существует.

    Бросок: Ничего.

    Сложность:

    Примечание: Инвалидирует итераторы к стертому элементу.

  41. <
    template<typenameDisposer>
     iteratorerase_after_and_dispose(const_iteratorbefore_f,const_iteratorl,
                                      Disposerdisposer);
    >

    Требует: Диспетчер::оператор()(указатель) не должен бросать.

    Эффекты: Стирает диапазон (до _f, l) из списка. Диспозитор::оператор()(указатель) вызывается для удаленных элементов.

    Возвращает: первый элемент, остающийся за пределами удаленных элементов, или конец(), если такой элемент не существует.

    Бросок: Ничего.

    Сложность: Линейный к элементам (l - before_f + 1).

    Примечание: Инвалидирует итераторы к стертому элементу.

  42. <
    template<typenameDisposer>
     iteratorerase_and_dispose(const_iteratori,Disposerdisposer);
    >

    Требует: Диспетчер::оператор()(указатель) не должен бросать.

    Эффекты: Стирает элемент, указанный i в списке. Деструкторы не называются. Диспозитор::оператор()(указатель) вызывается для удаленного элемента.

    Возвращает: первый элемент, остающийся за пределами удаленного элемента, или конец(), если такого элемента не существует.

    Бросает: Ничего.

    Сложность: Линейные элементы до i.

    Примечание: Инвалидирует итераторы (но не ссылки) на стертый элемент.

  43. <
    template<typenameDisposer>
     iteratorerase_and_dispose(const_iteratorf,const_iteratorl,
                                Disposerdisposer);
    >

    Требуется: f и l должны быть действительными итераторами элементов в этом. Диспетчер::оператор()(указатель) не должен бросать.

    Эффекты: Стирает диапазон, указанный b и e. Деструкторы не называются. Диспозитор::оператор()(указатель) вызывается для удаленных элементов.

    Возвращение: первый элемент, остающийся за пределами удаленных элементов, или конец (), если такой элемент не существует.

    Бросает: Ничего.

    Сложность: Линейный к числу стертых элементов плюс линейный к элементам до f.

    Примечание: Инвалидирует итераторы (но не ссылки) на стертые элементы.

  44. <
    template<typenameIterator>voidassign(Iteratorb,Iteratore);
    >

    Требуется: Ссылочный итератор должен давать значение l типа value_type.

    Эффекты: Очищает список и вставляет диапазон, указанный b и e. Ни разрушители, ни конструкторы копий не называются.

    Броски: Ничего.

    Сложность: Линейный к количеству вставленных элементов плюс линейный к элементам, содержащимся в списке, если это значение безопасного режима или автоматического разъединения. Линейное число элементов, включенных в список иначе.

    Примечание: Инвалидирует итераторы (но не ссылки) на стертые элементы.

  45. <
    template<typenameIterator,typenameDisposer>
     voiddispose_and_assign(Disposerdisposer,Iteratorb,Iteratore);
    >

    Требует: Диспетчер::оператор()(указатель) не должен бросать.

    Требует: Ссылочный итератор должен давать значение l типа value_type.

    Эффекты: Очищает список и вставляет диапазон, указанный b и e. Ни разрушители, ни конструкторы копий не называются. Диспозитор::оператор()(указатель) вызывается для удаленных элементов.

    Бросок: Ничего.

    Сложность: Линейное число вставленных элементов плюс линейное число элементов, содержащихся в списке.

    Примечание: Инвалидирует итераторы (но не ссылки) на стертые элементы.

  46. <
    voidsplice_after(const_iteratorprev,slist&x,const_iterator*l=0);
    >

    Требуется: prev должен указывать на элемент, содержащийся в этом списке, или на элемент

    : Переносит все элементы списка x в этот список, после элемента, указанного prev. Ни разрушители, ни конструкторы копий не называются.

    Возвращение: Ничего.

    Бросок: Ничего.

    Сложность: В общем, линейно к элементам, содержащимся в x. Постоянное время, если опция cache_last<>верна, а также постоянное время, если линейная опция верна, «это» пуста, а «l» не используется.

    Примечание: Итераторы значений, полученных из списка x, теперь указывают на элементы этого списка. Итераторы этого списка и все ссылки не являются недействительными.

    Дополнительная записка: Если факультативный параметр «l» предусмотрен, он будет присвоен последнему сплайсованному элементу или prev, если x пуст. Этот итератор можно использовать в качестве нового итератора «prev» для нового splice_after call. которые будут сплайсировать новые значения после ранее сплайсированных значений.

  47. <
    voidsplice_after(const_iteratorprev_pos,slist&x,const_iteratorprev_ele);
    >

    Требуется: Prev должен указывать на элемент, содержащийся в этом списке, или на элемент pre_begin(). prev_ele должен указывать на элемент, содержащийся в списке x или должен быть x.before_begin().

    Эффекты: Переносит элемент после prev_ele, из списка x в этот список, после элемента, указанного prev. Ни разрушители, ни конструкторы копий не называются.

    Бросок: Ничего.

    Сложность: Константа.

    Примечание: Итераторы значений, полученных из списка x, теперь указывают на элементы этого списка. Итераторы этого списка и все ссылки не являются недействительными.

  48. <
    voidsplice_after(const_iteratorprev_pos,slist&x,const_iteratorbefore_f,
                     const_iteratorbefore_l);
    >

    Требуется: prev_pos должен быть реферативным итератором в *this or be before_begin(), а before_f и before_l принадлежат x и ++before_f!= x.end() && before_l!= x.end().

    : Переносит диапазон (до _f, до _l) из списка x в этот список после элемента, указанного prev_pos. Ни разрушители, ни конструкторы копий не называются.

    Броски: Ничего.

    Сложность: Линейное число элементов, если<constant_time_size>верно. В другое время.

    Примечание: Итераторы значений, полученных из списка x, теперь указывают на элементы этого списка. Итераторы этого списка и все ссылки не являются недействительными.

  49. <
    voidsplice_after(const_iteratorprev_pos,slist&x,const_iteratorbefore_f,
                     const_iteratorbefore_l,size_typen);
    >

    Требуется: prev_pos должен быть реферативным итератором в *this or be before_begin(), а before_f и before_l принадлежат x и ++before_f!= x.end() && before_l!= x.end() и n == distance(before_f, before_l).

    Эффекты: Переносит диапазон (до f, до l) из списка x в этот список после элемента, указанного p. Ни разрушители, ни конструкторы копий не называются.

    Бросок: Ничего.

    Сложность: Постоянное время.

    Примечание: Итераторы значений, полученных из списка x, теперь указывают на элементы этого списка. Итераторы этого списка и все ссылки не являются недействительными.

  50. <
    voidsplice(const_iteratorit,slist&x,const_iterator*l=0);
    >

    Требуется:

    Эффекты: Переносит все элементы списка x в этот список перед указанным им элементом. Ни разрушители, ни конструкторы копий не называются.

    Возвращение: Ничего.

    Бросок: Ничего.

    Сложность: Линейный к элементам, содержащимся в x плюс линейный к элементам перед ним. Линейный к элементам перед ним, если опция cache_last<>верна. Постоянное время, если опция cache_last<>верна и она == конец(.)

    Примечание: Итераторы значений, полученных из списка x, теперь указывают на элементы этого списка. Итераторы этого списка и все ссылки не являются недействительными.

    Дополнительное примечание: Если факультативный параметр «l» предусмотрен, он будет присвоен последнему сплайсованному элементу или prev, если x пуст. Этот итератор можно использовать в качестве нового итератора «prev» для нового splice_after call. которые будут сплайсировать новые значения после ранее сплайсированных значений.

  51. <
    voidsplice(const_iteratorpos,slist&x,const_iteratorelem);
    >

    Требует: он должен быть действительным итератором этого. Элем должен указывать на элемент, содержащийся в списке x.

    Эффекты: Переносит элемент elem из списка x в этот список перед элементом, указанным pos. Ни разрушители, ни конструкторы копий не называются.

    Бросок: Ничего.

    Сложность: Линейный к элементам перед pos и перед elem. Линейный к элементам перед elem, если опция cache_last<>верна и pos == end().

    Примечание: Итераторы значений, полученных из списка x, теперь указывают на элементы этого списка. Итераторы этого списка и все ссылки не являются недействительными.

  52. <
    voidsplice(const_iteratorpos,slist&x,const_iteratorf,const_iteratorl);
    >

    Требуется: Пос должен быть реферативным итератором в *это и f и f принадлежат x и f и f допустимому диапазону на x.

    Эффекты: Переносит диапазон [f, l] из списка x в этот список, прежде чем элемент указывается pos. Ни разрушители, ни конструкторы копий не называются.

    Бросок: Ничего.

    Сложность: Линейный к сумме элементов перед pos, f и l плюс линейный к числу переданных элементов, если<constant_time_size>верно. Линейный к сумме элементов до f, и l плюс линейный к числу элементов, переданных, если<constant_time_size>истинно, если cache_last<>истинно и pos == конец()

    Примечание: Итераторы значений, полученных из списка x, теперь указывают на элементы этого списка. Итераторы этого списка и все ссылки не являются недействительными.

  53. <
    voidsplice(const_iteratorpos,slist&x,const_iteratorf,const_iteratorl,
               size_typen);
    >

    Требуется: pos должен быть реферативным итератором в *это и f и l принадлежат x и f и l допустимый диапазон на x. n == расстояние (f, l).

    Эффекты: Переносит диапазон [f, l] из списка x в этот список, прежде чем элемент указывается pos. Ни разрушители, ни конструкторы копий не называются.

    Бросок: Ничего.

    Сложность: Линейный к сумме элементов перед pos, f и l. Линейный к сумме элементов перед f и l, если cache_last<>истинно и pos == конец().

    Примечание: Итераторы значений, полученных из списка x, теперь указывают на элементы этого списка. Итераторы этого списка и все ссылки не являются недействительными.

  54. <
    template<typenamePredicate>voidsort(Predicatep);
    >

    Эффекты: Эта функция сортирует список *это согласно std::less. Сорт стабилен, то есть сохраняется относительный порядок эквивалентных элементов.

    Броски: Если value_traits::node_traits::node constructor throws (это не происходит с заранее заданными Boost.Intrusive крючками) или predicate throws. Основная гарантия.

    Сложность: Количество сравнений приблизительно равно N log N, где N — размер списка.

    Примечание: Итераторы и ссылки не признаются недействительными

  55. <
    voidsort();
    >

    Требуется: p должна быть функцией сравнения, которая вызывает строгую слабую упорядоченность, и как это, так и x должны быть отсортированы в соответствии с этой упорядоченностью. Списки x и * это должны быть различными.

    Эффекты: Эта функция удаляет все элементы x и вставляет их в *это. Слияние стабильно; то есть, если элемент из * это эквивалентно элементу из x, то элемент из * это будет предшествовать элементу из x.

    Бросает: Если value_traits::node_traits::node constructor throws (это не происходит с предопределенными Boost.Intrusive hooks) или std::lessthrows. Основная гарантия.

    Сложность: Эта функция является линейным временем: она выполняет максимум размер() + x.size() - 1 сравнение.

    Примечание: Итераторы и ссылки не являются недействительными.

  56. <
    template<typenamePredicate>
     voidmerge(slist&x,Predicatep,const_iterator*l=0);
    >

    Требуется: p должна быть функцией сравнения, которая вызывает строгую слабую упорядоченность, и как это, так и x должны быть отсортированы в соответствии с этой упорядоченностью. Списки x и * должны быть различными.

    Эффекты: Эта функция удаляет все элементы x и вставляет их в *это. Слияние стабильно; то есть, если элемент из * это эквивалентно элементу из x, то элемент из * это будет предшествовать элементу из x.

    Возвращение: Ничего.

    Бросок: Если предикат бросит. Основная гарантия.

    Сложность: Эта функция является линейным временем: она выполняет максимум размер() + x.size() - 1 сравнение.

    Примечание: Итераторы и ссылки не являются недействительными.

    Дополнительная записка: Если необязательный аргумент «l» принят, он назначается итератору до последнего переданного значения или конец () x пуст.

  57. <
    voidmerge(slist&x);
    >

    Эффекты: Эта функция удаляет все элементы x и вставляет их в порядок в соответствии со std::less. Слияние стабильно; то есть, если элемент из *это эквивалентно элементу из x, то элемент из *это будет предшествовать элементу из x.

    Бросает: если std::lessбросает. Основная гарантия.

    Сложность: Эта функция является линейным временем: она выполняет максимум размер() + x.size() - 1 сравнение.

    Примечание: Итераторы и ссылки не являются недействительными

    .
  58. <
    voidreverse();
    >

    Эффекты: Обратный порядок элементов в списке

    Бросает: Ничего.

    Сложность: Эта функция является линейной по отношению к содержащимся элементам.

    Примечание: Итераторы и ссылки не признаются недействительными

    .
  59. <
    voidremove(const_referencevalue);
    >

    Эффекты: Удалите все элементы, которые сравниваются с ценностью. Деструкторы не называются.

    Бросок: Если std::equal_toбросок. Основная гарантия.

    Сложность: Линейное время. Он выполняет точное сравнение размеров () для равенства.

    Примечание: Относительный порядок элементов, которые не удаляются, не изменяется, и итераторы элементов, которые не удаляются, остаются действительными. Эта функция является линейным временем: она выполняет точное сравнение размеров для равенства.

  60. <
    template<typenameDisposer>
     voidremove_and_dispose(const_referencevalue,Disposerdisposer);
    >

    Требует: Диспетчер::оператор()(указатель) не должен бросать.

    Эффекты: Удалите все элементы, которые сравниваются с ценностью. Диспозитор::оператор()(указатель) вызывается для каждого удаленного элемента.

    Броски: Если std::equal_toбросок. Основная гарантия.

    Сложность: Линейное время. Он выполняет точное сравнение размеров () для равенства.

    Примечание: Относительный порядок элементов, которые не удаляются, не изменяется, и итераторы элементов, которые не удаляются, остаются действительными.

  61. <
    template<typenamePred>voidremove_if(Predpred);
    >

    Эффекты: Удаляет все элементы, для которых удовлетворяется заданный предикат. Никаких деструкторов.

    Броски: Если бы Хищник бросил. Основная гарантия.

    Сложность: Линейное время. Он выполняет точно размер () вызовов к предикату.

    Примечание: Относительный порядок элементов, которые не удаляются, не изменяется, и итераторы элементов, которые не удаляются, остаются действительными.

  62. <
    template<typenamePred,typenameDisposer>
     voidremove_and_dispose_if(Predpred,Disposerdisposer);
    >

    Требует: Диспетчер::оператор()(указатель) не должен бросать.

    Эффекты: Удаляет все элементы, для которых удовлетворяется заданный предикат. Диспозитор::оператор()(указатель) вызывается для каждого удаленного элемента.

    Броски: Если бы Хищник бросил. Основная гарантия.

    Сложность: Линейное время. Он выполняет точное сравнение размеров () для равенства.

    Примечание: Относительный порядок элементов, которые не удаляются, не изменяется, и итераторы элементов, которые не удаляются, остаются действительными.

  63. <
    voidunique();
    >

    Эффекты: Удалите соседние дублирующие элементы или соседние элементы, которые равны из списка. Никаких деструкторов.

    Броски: Если std::equal_toбросок. Основная гарантия.

    Сложность: Линейное время (размер()-1) сравнения вызывает пред()).

    Примечание: Относительный порядок элементов, которые не удаляются, не изменяется, и итераторы элементов, которые не удаляются, остаются действительными.

  64. <
    template<typenameBinaryPredicate>voidunique(BinaryPredicatepred);
    >

    Эффекты: Удаляет соседние дублирующие элементы или соседние элементы, удовлетворяющие некоторому двоичному предикату из списка. Никаких деструкторов.

    Броски: Если предикат бросит. Основная гарантия.

    Сложность: Линейное время (размер()-1) сравнения сравнения равенства.

    Примечание: Относительный порядок элементов, которые не удаляются, не изменяется, и итераторы элементов, которые не удаляются, остаются действительными.

  65. <
    template<typenameDisposer>voidunique_and_dispose(Disposerdisposer);
    >

    Требует: Диспетчер::оператор()(поинт) не должен бросать.

    Эффекты: Удаляет соседние дублирующие элементы или соседние элементы, удовлетворяющие некоторому двоичному предикату из списка. Диспозитор::оператор()(указатель) вызывается для каждого удаленного элемента.

    Броски: Если std::equal_toбросок. Основная гарантия.

    Сложность: Линейное время (размер()-1) сравнения сравнения равенства.

    Примечание: Относительный порядок элементов, которые не удаляются, не изменяется, и итераторы элементов, которые не удаляются, остаются действительными.

  66. <
    template<typenameBinaryPredicate,typenameDisposer>
     voidunique_and_dispose(BinaryPredicatepred,Disposerdisposer);
    >

    Требует: Диспетчер::оператор()(указатель) не должен бросать.

    Эффекты: Удаляет соседние дублирующие элементы или соседние элементы, удовлетворяющие некоторому двоичному предикату из списка. Диспозитор::оператор()(указатель) вызывается для каждого удаленного элемента.

    Броски: Если предикат бросит. Основная гарантия.

    Сложность: Линейное время (размер()-1) сравнения сравнения равенства.

    Примечание: Относительный порядок элементов, которые не удаляются, не изменяется, и итераторы элементов, которые не удаляются, остаются действительными.

  67. <
    iteratoriterator_to(referencevalue);
    >

    Требуется: Значение должно быть ссылкой на значение, включенное в список.

    Эффекты: Эта функция возвращает const_iterator, указывающий на элемент

    Бросок: Ничего.

    Сложность: Постоянное время.

    Примечание: Итераторы и ссылки не являются недействительными.

  68. <
    const_iteratoriterator_to(const_referencevalue)const;
    >

    Требуется: значение должно быть ссылкой на значение, вставленное в список.

    Эффекты: Эта функция возвращает итератор, указывающий на элемент.

    Броски: Ничего.

    Сложность: Постоянное время.

    Примечание: Итераторы и ссылки не являются недействительными.

  69. <
    iteratorprevious(iteratori);
    >

    Возвращение: Итератор элемента перед i в списке. Возвращает конечный автор, если я или начальный автор, или список пуст.

    Броски: Ничего.

    Сложность: Линейное число элементов перед i. Постоянный, если cache_last<>является истинным и i == конец().

  70. <
    const_iteratorprevious(const_iteratori)const;
    >

    Возвращение: Const_iterator к элементу перед i в списке. Возвращает конечный Const_iterator, если i является начальным Const_iterator или список пуст.

    Броски: Ничего.

    Сложность: Линейное число элементов перед i. Постоянный, если cache_last<>является истинным и i == конец().

  71. <
    iteratorprevious(const_iteratorprev_from,iteratori);
    >

    Возвращение: Итератор к элементу перед i в списке, начиная поиск по элементу после prev_from. Возвращает конечный автор, если я или начальный автор, или список пуст.

    Бросает: Ничего.

    Сложность: Линейное число элементов перед i. Постоянный, если cache_last<>является истинным и i == конец().

  72. <
    const_iteratorprevious(const_iteratorprev_from,const_iteratori)const;
    >

    Возвращение: Const_iterator к элементу перед i в списке, начиная поиск по элементу после prev_from. Возвращает конечный Const_iterator, если i является начальным Const_iterator или список пуст.

    Броски: Ничего.

    Сложность: Линейное число элементов перед i. Постоянный, если cache_last<>является истинным и i == конец().

  73. <
    voidcheck()const;
    >

    Эффекты: Утверждает целостность контейнера.

    Сложность: Линейное время.

    Примечание: Метод не имеет эффекта, когда утверждения выключены (например, с NDEBUG). Экспериментальная функция интерфейса может измениться в будущих версиях.

slist public static functions

  1. <
    staticslist&container_from_end_iterator(iteratorend_iterator);
    >

    Предварительное условие: end_iterator должен быть действительным конечным итератором списка.

    Эффекты: Возвращает ссылку на список, связанный с конечным итератором

    Бросает: Ничего.

    Сложность: Постоянная.

  2. <
    staticconstslist&container_from_end_iterator(const_iteratorend_iterator);
    >

    Предварительное условие: end_iterator должен быть действительным end const_iterator списка.

    Эффекты: Возвращает ссылку на список, связанный с конечным итератором

    Бросает: Ничего.

    Сложность: Постоянная.

  3. <
    staticiterators_iterator_to(referencevalue);
    >

    Требуется: значение должно быть ссылкой на значение, вставленное в список.

    Эффекты: Эта функция возвращает const_iterator, указывающий на элемент

    Бросает: Ничего.

    Сложность: Постоянное время.

    Примечание: Итераторы и ссылки не являются недействительными. Эта статическая функция доступна только в том случае, если значенияне имеют состояния.

  4. <
    staticconst_iterators_iterator_to(const_referencevalue);
    >

    Требуется: значение должно быть ссылкой на значение, вставленное в список.

    Эффекты: Эта функция возвращает итератор, указывающий на элемент.

    Броски: Ничего.

    Сложность: Постоянное время.

    Примечание: Итераторы и ссылки не являются недействительными. Эта статическая функция доступна только в том случае, если значенияне имеют состояния.

slist private member functions

  1. <
    voidpriv_splice_after(constnode_ptr&prev_pos_n,slist&x,
                          constnode_ptr&before_f_n,
                          constnode_ptr&before_l_n);
    >
  2. <
    voidpriv_incorporate_after(constnode_ptr&prev_pos_n,
                               constnode_ptr&first_n,
                               constnode_ptr&before_l_n);
    >
  3. <
    voidpriv_reverse(unspecified);
    >
  4. <
    voidpriv_reverse(unspecified);
    >
  5. <
    voidpriv_shift_backwards(size_typen,unspecified);
    >
  6. <
    voidpriv_shift_backwards(size_typen,unspecified);
    >
  7. <
    voidpriv_shift_forward(size_typen,unspecified);
    >
  8. <
    voidpriv_shift_forward(size_typen,unspecified);
    >

slist private static functions

  1. <
    staticvoidpriv_swap_cache_last(slist*this_impl,slist*other_impl);
    >
  2. <
    staticvoidpriv_swap_lists(constnode_ptr&this_node,
                               constnode_ptr&other_node,unspecified);
    >
  3. <
    staticvoidpriv_swap_lists(constnode_ptr&this_node,
                               constnode_ptr&other_node,unspecified);
    >
  4. <
    staticslist&
    priv_container_from_end_iterator(constconst_iterator&end_iterator);
    >

PrevUpHomeNext

Статья Class template slist раздела The Boost C++ Libraries BoostBook Documentation Subset Reference может быть полезна для разработчиков на c++ и boost.




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.



:: Главная :: Reference ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-30 11:47:00
2025-05-19 19:41:58/0.020762920379639/1