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

Class template linear_slist_algorithms

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 linear_slist_algorithms

boost::intrusive::linear_slist_algorithms

Synopsis

// In header: <boost/intrusive/linear_slist_algorithms.hpp>
template<typename NodeTraits> 
class linear_slist_algorithms {
public:
  // types
  typedef NodeTraits::node           node;          
  typedef NodeTraits::node_ptr       node_ptr;      
  typedef NodeTraits::const_node_ptr const_node_ptr;
  typedef NodeTraits                 node_traits;   
  // public static functions
  static void init(const node_ptr &);
  static bool unique(const_node_ptr);
  static bool inited(const_node_ptr);
  static void unlink_after(const node_ptr &);
  static void unlink_after(const node_ptr &, const node_ptr &);
  static void link_after(const node_ptr &, const node_ptr &);
  static void transfer_after(const node_ptr &, const node_ptr &, 
                             const node_ptr &);
  static void init_header(const node_ptr &);
  static node_ptr get_previous_node(const node_ptr &, const node_ptr &);
  static std::size_t count(const const_node_ptr &);
  static void swap_trailing_nodes(const node_ptr &, const node_ptr &);
  static node_ptr reverse(const node_ptr &);
  static std::pair< node_ptr, node_ptr > 
  move_first_n_backwards(const node_ptr &, std::size_t);
  static std::pair< node_ptr, node_ptr > 
  move_first_n_forward(const node_ptr &, std::size_t);
};

Description

линейные_slist_алгоритмыпредоставляет базовые алгоритмы для манипулирования узлами, образующими линейный единичный список.

линейные_slist_алгоритмысконфигурирован с классом NodeTraits, который инкапсулирует информацию о узле, которым нужно манипулировать. NodeTraits должен поддерживать следующий интерфейс:

Типоразмеры:

<node>Тип узла, который формирует линейный список

<node_ptr>: Указатель на узел

<const_node_ptr>: Указатель на узел const

Статические функции:

<static node_ptr get_next(const_node_ptr n);>

<static void set_next(node_ptr n, node_ptr next);>

linear_slist_algorithms public static functions

  1. <
    staticvoidinit(constnode_ptr&this_node);
    >

    Эффекты: Построен неиспользуемый элемент списка, поставив следующий указатель на нуль:<NodeTraits::get_next(this_node) == node_ptr()>

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

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

  2. <
    staticboolunique(const_node_ptrthis_node);
    >

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

    Эффекты: Верно, что «это_узел» является единственным узлом кругового списка: или это не вставленный узел:<return node_ptr() == NodeTraits::get_next(this_node) || NodeTraits::get_next(this_node) == this_node>

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

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

  3. <
    staticboolinited(const_node_ptrthis_node);
    >

    Эффекты: Верно, что "этот_узел" имеет то же состояние, как если бы он был введен с использованием "init(node_ptr)"

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

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

  4. <
    staticvoidunlink_after(constnode_ptr&prev_node);
    >

    Требуется: Узел prev_node должен находиться в круговом списке или быть пустым круговым списком.

    Эффекты: Отключает следующий узел prev_node из кругового списка.

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

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

  5. <
    staticvoidunlink_after(constnode_ptr&prev_node,
                            constnode_ptr&last_node);
    >

    Требуется: prev_node и last_node должны находиться в круговом списке или быть пустым круговым списком.

    Эффекты: Отсоединяет диапазон (prev_node, last_node) от линейного списка.

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

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

  6. <
    staticvoidlink_after(constnode_ptr&prev_node,constnode_ptr&this_node);
    >

    Требуется: prev_node должен быть узлом линейного списка.

    Эффекты: Связывает этот_узл после prev_узла в линейном списке.

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

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

  7. <
    staticvoidtransfer_after(constnode_ptr&p,constnode_ptr&b,
                              constnode_ptr&e);
    >

    Требуется: b и e должны быть узлами одного и того же линейного списка или пустого диапазона. p должен быть узлом другого линейного списка.

    Эффекты: Удаляет узлы из (b, e) диапазона от их линейного списка и вставляет их после p в линейный список p.

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

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

  8. <
    staticvoidinit_header(constnode_ptr&this_node);
    >

    Эффекты: Конструирует пустой список, делая этот узел единственным узлом кругового списка:<NodeTraits::get_next(this_node) == this_node>.

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

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

  9. <
    staticnode_ptr
    get_previous_node(constnode_ptr&prev_init_node,constnode_ptr&this_node);
    >

    Требуется: Этот_узл и prev_init_узл должны быть в одном линейном списке.

    Эффекты: Возвращает предыдущий узел этого_узла в линейном начале списка. Поиск по адресу prev_init_node. Первым узлом, проверенным на равенство, является NodeTraits::get_next (prev_init_node).

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

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

  10. <
    staticstd::size_tcount(constconst_node_ptr&this_node);
    >

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

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

    Сложность: Линейный

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

  11. <
    staticvoidswap_trailing_nodes(constnode_ptr&this_node,
                                   constnode_ptr&other_node);
    >

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

    Эффекты: Перемещает все узлы, ранее прикованные цепью после этого_узла после другого_узла и наоборот.

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

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

  12. <
    staticnode_ptrreverse(constnode_ptr&p);
    >

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

    Возвращение: Новый первый узел списка.

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

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

  13. <
    staticstd::pair<node_ptr,node_ptr>
    move_first_n_backwards(constnode_ptr&p,std::size_tn);
    >

    Эффекты: Перемещает первые n узлов начиная с p в конец списка.

    Возвращение: Пара, содержащая новый первый и последний узел списка или если было какое-либо движение, нуль-пара, если n не приводит к движению.

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

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

  14. <
    staticstd::pair<node_ptr,node_ptr>
    move_first_n_forward(constnode_ptr&p,std::size_tn);
    >

    Эффекты: Перемещает первые n узлов, начиная с p, в начало списка.

    Возвращение: Пара, содержащая новый первый и последний узел списка или если было какое-либо движение, нуль-пара, если n не приводит к движению.

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

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


PrevUpHomeNext

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




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



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


реклама


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

Время компиляции файла: 2024-08-30 11:47:00
2025-07-05 08:26:41/0.0047688484191895/0