OVH Cloud OVH Cloud

Adaptateurs de séquences et swap

2 réponses
Avatar
Patrick Mézard
Les adaptateurs de séquences restreignent les interfaces des séquences sur
lesquelles ils s'appuient afin de protéger leurs invariants. Mais pourquoi
swap, qui est a priori une méthode commune aux conteneurs, n'est-elle pas
définie pour ces adaptateurs ?

Patrick Mézard

2 réponses

Avatar
Michel Michaud
Dans news:blpob0$kq3$, Patrick
Les adaptateurs de séquences restreignent les interfaces des
séquences sur lesquelles ils s'appuient afin de protéger leurs
invariants. Mais pourquoi swap, qui est a priori une méthode
commune aux conteneurs, n'est-elle pas définie pour ces adaptateurs
?


Peut-être parce qu'il n'est pas nécessaire que la séquence utilisée
supporte swap ! Je sais que ça amène la question du pourquoi à un
autre niveau... Mais alors on dira que les adaptateurs sont
volontairement très simple. Si tu veux faire un swap entre deux
stack ou queue, tu peux utiliser std::swap.

--
Michel Michaud
http://www.gdzid.com
FAQ de fr.comp.lang.c++ :
http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ/

Avatar
Patrick Mézard
Les adaptateurs de séquences restreignent les interfaces des
séquences sur lesquelles ils s'appuient afin de protéger leurs
invariants. Mais pourquoi swap, qui est a priori une méthode
commune aux conteneurs, n'est-elle pas définie pour ces adaptateurs
?


Peut-être parce qu'il n'est pas nécessaire que la séquence utilisée
supporte swap ! Je sais que ça amène la question du pourquoi à un
autre niveau... Mais alors on dira que les adaptateurs sont
volontairement très simple. Si tu veux faire un swap entre deux
stack ou queue, tu peux utiliser std::swap.


Oui, mais au niveau des conteneurs de la STL, l'intérêt essentiel de swap
est qu'il est "sans exceptions", et que pas mal d'idiomes sont liés à ça
(sans parler des questions de performances). En particulier, dès qu'on veux
pouvoir écrire du code offrant des garanties "fortes" vis-à-vis des
exceptions (tant que je te tiens, si tu as des traductions un peu
officielles pour toute la terminologie liée aux "exception safety
guarantees"...), swap (en le supposant no-throw()) est extrêmement utile.

Patrick Mézard