26 Containers library [containers]

26.3 Sequence containers [sequences]

26.3.9 Class template forward_­list [forwardlist]

26.3.9.6 forward_­list operations [forwardlist.ops]

void splice_after(const_iterator position, forward_list& x); void splice_after(const_iterator position, forward_list&& x);

Requires:position являетсяbefore_­begin() или является разыменяемым итератором в диапазоне[begin(), end()). get_­allocator() == x.get_­allocator(). &x != this.

Effects: Вставляет содержимоеx после positionиx становится пустым. Указатели и ссылки на перемещенные элементыx теперь относятся к тем же элементам, но как к членам*this. Итераторы, относящиеся к перемещенным элементам, будут продолжать ссылаться на свои элементы, но теперь они ведут себя как итераторы в*this, а не вx.

Throws: Ничего такого.

Complexity:O(distance(x.begin(), x.end()))

void splice_after(const_iterator position, forward_list& x, const_iterator i); void splice_after(const_iterator position, forward_list&& x, const_iterator i);

Requires:position являетсяbefore_­begin() или является разыменяемым итератором в диапазоне[begin(), end()). Следующий итераторi - это итератор с возможностью разыменования вx. get_­allocator() == x.get_­allocator().

Effects: Вставки элемент следующиеi в*thisпосле position, и удаляет его изx. Результат не меняется, еслиposition == i илиposition == ++i. Указатели и ссылки, чтобы*++i продолжать ссылаться на тот же элемент, но как на член *this. Итераторы*++i продолжают ссылаться на тот же элемент, но теперь ведут себя как итераторы в*this, а не вx.

Throws: Ничего такого.

Complexity:O(1)

void splice_after(const_iterator position, forward_list& x, const_iterator first, const_iterator last); void splice_after(const_iterator position, forward_list&& x, const_iterator first, const_iterator last);

Requires:position являетсяbefore_­begin() или является разыменяемым итератором в диапазоне[begin(), end()).(first, last) - допустимый диапазон вx, и все итераторы в этом диапазоне(first, last) можно разыменовать.position не является итератором в диапазоне(first, last). get_­allocator() == x.get_­allocator().

Effects: Вставляет элементы в диапазон(first, last) послеposition и удаляет элементы изx. Указатели и ссылки на перемещенные элементы x теперь относятся к тем же элементам, но как к членам*this. Итераторы, относящиеся к перемещенным элементам, будут продолжать ссылаться на свои элементы, но теперь они ведут себя как итераторы в*this, а не вx.

Complexity:O(distance(first, last))

void remove(const T& value); template <class Predicate> void remove_if(Predicate pred);

Effects: Удаляет все элементы в списке, на которые ссылается итератор списка,i для которых выполняются следующие условия:*i == value (forremove()), pred(*i) istrue (forremove_­if()). Делает недействительными только итераторы и ссылки на удаленные элементы.

Throws: Ничего, если сравнение равенства или предикат не вызывает исключения.

Remarks:Stable.

Complexity: Точноdistance(begin(), end()) применения соответствующего предиката.

void unique(); template <class BinaryPredicate> void unique(BinaryPredicate pred);

Effects: Удаляет все элементы, кроме первого, из каждой последовательной группы равных элементов, на которую ссылается итераторi в диапазоне,[first + 1, last) для которого*i == *(i-1) (для версии без аргументов) илиpred(*i, *(i - 1)) (для версии с аргументом предиката) выполняется. Делает недействительными только итераторы и ссылки на удаленные элементы.

Throws: Ничего, если сравнение равенства или предикат не вызывает исключения.

Complexity: Если диапазон[first, last) не пуст, то это точно(last - first) - 1 применения соответствующего предиката, в противном случае - никакие применения предиката.

void merge(forward_list& x); void merge(forward_list&& x); template <class Compare> void merge(forward_list& x, Compare comp); template <class Compare> void merge(forward_list&& x, Compare comp);

Requires:comp определяетstrict weak orderingи*this иx оба сортируются в соответствии с этим порядком. get_­allocator() == x.get_­allocator().

Effects: Объединяет два отсортированных диапазона[begin(), end()) и [x.begin(), x.end()).x после слияния пусто. Если исключение выбрасывается иначе, чем путем сравнения, нет никаких эффектов. Указатели и ссылки на перемещенные элементыx теперь относятся к тем же элементам, но как к членам*this. Итераторы, относящиеся к перемещенным элементам, будут продолжать ссылаться на свои элементы, но теперь они ведут себя как итераторы в*this, а не в x.

Remarks:Stable. Поведение не определено, если get_­allocator() != x.get_­allocator().

Complexity: Максимумdistance(begin(), end()) + distance(x.begin(), x.end()) - 1 сравнений.

void sort(); template <class Compare> void sort(Compare comp);

Requires:operator< (для версии без аргументов) илиcomp (для версии с аргументом сравнения) определяетstrict weak ordering.

Effects: Сортирует список по объекту функцииoperator< илиcomp . Если выбрасывается исключение, порядок элементов в нем*this не указан. Не влияет на валидность итераторов и ссылок.

Remarks:Stable.

Complexity: ПримерноNlogN сравнения, гдеN естьdistance(begin(), end()).

void reverse() noexcept;

Effects: Меняет порядок элементов в списке на обратный. Не влияет на валидность итераторов и ссылок.

Complexity: Линейное время.