std::list<T,Allocator>:: splice
|
void
splice
(
const_iterator pos, list
&
other
)
;
|
(1) | (constexpr depuis C++26) |
|
void
splice
(
const_iterator pos, list
&&
other
)
;
|
(2) |
(depuis C++11)
(constexpr depuis C++26) |
|
void
splice
(
const_iterator pos, list
&
other, const_iterator it
)
;
|
(3) | (constexpr depuis C++26) |
|
void
splice
(
const_iterator pos, list
&&
other, const_iterator it
)
;
|
(4) |
(depuis C++11)
(constexpr depuis C++26) |
|
void
splice
(
const_iterator pos, list
&
other,
const_iterator first, const_iterator last ) ; |
(5) | (constexpr depuis C++26) |
|
void
splice
(
const_iterator pos, list
&&
other,
const_iterator first, const_iterator last ) ; |
(6) |
(depuis C++11)
(constexpr depuis C++26) |
Transfère les éléments de other vers * this . Les éléments sont insérés à la position pos .
Si l'une des conditions suivantes est satisfaite, le comportement est indéfini :
-
pos
n'est pas dans l'intervalle
[begin ( ),end ( )). - get_allocator ( ) == other. get_allocator ( ) est false .
[
begin
(
)
,
end
(
)
)
, le comportement est indéfini.
[
first
,
last
)
.
-
[first,last)n'est pas une plage valide dans other , -
Tout itérateur dans
[first,last)n'est pas déréférençable. -
pos
se trouve dans
[first,last).
Aucun itérateur ou référence n'est invalidé. Si * this et other font référence à des objets différents, les itérateurs pointant vers les éléments transférés se réfèrent désormais à * this , et non à other .
Table des matières |
Paramètres
| pos | - | élément avant lequel le contenu sera inséré |
| other | - | autre conteneur depuis lequel transférer le contenu |
| it | - | élément à transférer de other vers * this |
| first, last | - | paire d'itérateurs définissant la plage d'éléments à transférer de other vers * this |
Complexité
Exemple
#include <iostream> #include <list> std::ostream& operator<<(std::ostream& ostr, const std::list<int>& list) { for (auto& i : list) ostr << ' ' << i; return ostr; } int main () { std::list<int> list1{1, 2, 3, 4, 5}; std::list<int> list2{10, 20, 30, 40, 50}; auto it = list1.begin(); std::advance(it, 2); list1.splice(it, list2); std::cout << "list1:" << list1 << '\n'; std::cout << "list2:" << list2 << '\n'; list2.splice(list2.begin(), list1, it, list1.end()); std::cout << "list1:" << list1 << '\n'; std::cout << "list2:" << list2 << '\n'; }
Sortie :
list1: 1 2 10 20 30 40 50 3 4 5 list2: list1: 1 2 10 20 30 40 50 list2: 3 4 5
Rapports de défauts
Les rapports de défauts modifiant le comportement suivants ont été appliqués rétroactivement aux normes C++ précédemment publiées.
| DR | Appliqué à | Comportement publié | Comportement correct |
|---|---|---|---|
| LWG 250 | C++98 |
les références et itérateurs vers l'élément
déplacé étaient tous invalidés |
ils se réfèrent ou pointent vers le(s)
même(s) élément(s) dans * this |
| N2525 | C++98 |
le splicing en O(1) ne pouvait être garanti si
get_allocator ( ) ! = other. get_allocator ( ) |
le comportement est
indéfini dans ce cas |
Voir aussi
|
fusionne deux listes triées
(fonction membre publique) |
|
|
supprime les éléments satisfaisant des critères spécifiques
(fonction membre publique) |