Значение или полезность libstdc ++ Splice Function

Из того, что я знаю, сращивание должно вырезать кусок из одного списка и поместить его в другой. Я не понимаю, для чего предназначен следующий код (взят из http://gcc.gnu.org/onlinedocs/libstdc++/latest-doxygen/a01477_source.html строка 112, некоторая стандартная библиотека, которую я читал, чтобы лучше понять различные структуры данных):

inline void
__slist_splice_after(_Slist_node_base* __pos, _Slist_node_base* __head)
{
_Slist_node_base* __before_last = __slist_previous(__head, 0);
if (__before_last != __head)
{
_Slist_node_base* __after = __pos->_M_next;
__pos->_M_next = __head->_M_next;
__head->_M_next = 0;
__before_last->_M_next = __after;
}
}

Похоже, что __head обрезается с обоих концов и нигде не заканчивается.

0

Решение

Посмотрите, как это используется:

  // Removes all of the elements from the list __x to *this, inserting
// them immediately after __pos.  __x must not be *this.  Complexity:
// linear in __x.size().
void
splice_after(iterator __pos, slist& __x)
{ __slist_splice_after(__pos._M_node, &__x._M_head); }

И посмотри как _M_head объявлено:

  _Slist_node_base _M_head;

Итак __head параметр не является реальным узлом, это node_baseЭто означает, что он не содержит никаких данных, это просто указатель на первый элемент, поэтому он не «обрезается», потому что он все еще находится в slist это член, и это заканчивается именно там, где это началось.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]