std::forward_list::splice_after
Z cppreference.com
<tbody>
</tbody>
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).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
|
Zwracana wartość
(brak)
Złożoność
1) Liniowa względem rozmiaru other
2) Stała
3) Liniowa względem
std::distance(first, last)| Ta sekcja jest niedokończona.
Powód: sprawdzić, czemu (i czy rzeczywiście) liniowa. Łatwo wyobrazić sobie implementację, radzącą sobie w czasie stałym. Wartość dla przeciążenia (1) różni się z wartością dla std::forward_list |
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
Zobacz także
| scala dwie posortowane listy (publiczna metoda) | |
| usuwa elementy spełniające wskazane kryteria (publiczna metoda) |