Przestrzenie nazw
Warianty
Działania

std::forward_list::splice_after

Z cppreference.com
void splice_after( const_iterator pos, forward_list& other );
(1) (od C++11)
void splice_after( const_iterator pos, forward_list&& other );
(1) (od C++11)
void splice_after( const_iterator pos, forward_list& other,
                   const_iterator it );
(2) (od C++11)
void splice_after( const_iterator pos, forward_list&& other,
                   const_iterator it );
(2) (od C++11)
void splice_after( const_iterator pos, forward_list& other,
                   const_iterator first, const_iterator last );
(3) (od C++11)
void splice_after( const_iterator pos, forward_list&& other,
                   const_iterator first, const_iterator last );
(3) (od C++11)

Przenosi elementy z innej forward_list do *this.

Nie są wykonywane żadne operacje kopiowania ani przenoszenia na poszczególnych elementach. Przeniesienie następuję przez podmianę wartości wewnętrznych wskaźników w wierzchołkach listy. pos jest poprawnym iteratorem w *this lub iteratorem before_begin(). Zachowanie jest niezdefiniowane, jeśli: get_allocator() != other.get_allocator(). Żadne iteratory ani referencje nie zostają unieważnione, jednak iteratory wskazujące na przeniesione elementy odnoszą się teraz do *this, a nie do other.

1) Przenosi wszystkie elementy z other do *this. Elementy są wstawione bezpośrednio za elementem wskazywanym przez pos. Kontener other zostaje opróżniony w wyniku tej operacji. Zachowanie jest niezdefiniowane, jeśli this == &other.
2) Przenosi element wskazywany przez iterator następny po iteratorze it z other do *this. Element ten zostaje wstawiony bezpośrednio za elementem wskazywanym przez pos. Nie ma efektu, jeśli pos==it lub pos==++it.
3) Przenosi elementy z przedziału (first, last) z other do *this. Elementy są wstawione bezpośrednio za elementem wskazywanym przez pos. Element wskazywany przez first nie jest przenoszony. Zachowanie jest niezdefiniowane, jeśli pos jest iteratorem wewnątrz przedziału (first,last).

Spis treści

[edytuj] Parametry

pos - element za którym będzie wstawiona nowa zawartość
other - inny kontener, z którego zostanie przeniesiona zawartość
it - iterator poprzedzający iterator na element do przeniesienia z other do *this
first, last - przedział z other, z którego elementy zostaną przeniesione do *this

[edytuj] Zwracana wartość

(brak)

[edytuj] Złożoność

1) Liniowa względem rozmiaru other
2) Stała
3) Liniowa względem std::distance(first, last)

[edytuj] Przykład

Demonstruje znaczenie otwartego przedziału (first, last) w trzeciej formie splice_after(): pierwszy l1 nie zostaje przeniesiony.

#include <iostream>
#include <forward_list>
 
int main()
{
    std::forward_list<int> l1 = {1,2,3,4,5};
    std::forward_list<int> l2 = {10,11,12};
 
    l2.splice_after(l2.cbegin(), l1, l1.cbegin(), l1.cend());
    // nie jest rownowazne z l2.splice_after(l2.cbegin(), l1);
 
    for(int n : l1)
        std::cout << n << ' ';
    std::cout << '\n';
 
    for(int n : l2)
        std::cout << n << ' ';
    std::cout << '\n';
}

Wynik:

1
10 2 3 4 5 11 12

[edytuj] Zobacz także

scala dwie posortowane listy
(publiczna metoda) [edit]
usuwa elementy spełniające wskazane kryteria
(publiczna metoda) [edit]