En utilisant http://www.cppreference.com/wiki/stl/deque/insert comme référence, j'insérais des valeurs dans un deque à certains endroits.stl :: insert de deque (loc, val) - comportement incohérent à la fin de deque par rapport à d'autres emplacements?
Par exemple, si deque A était:
a, b, d, e, g
avec un itérateur pointant vers d, je peux:
A.insert(iter, c); // insert val c before loc iter
//deque is now a, b, c, d, e, g
et iter encore des points à d. Cependant, lorsque les points iter à g, le dernier élément:
A.insert(iter, f);
//deque is now a, b, c, d, e, f, g
mais le iter pointe maintenant vers f !!
Ma solution actuelle est:
iter = A.insert(loc, val); // point iterator to element that was inserted before loc
iter++; // point iter back to loc
Je n'ai pas testé à nouveau ou quoi que ce soit, il a été ennuyeux d'avoir passé tant de temps suivi d'un bug vers le bas, juste pour découvrir insert() s 'incompatible comportement, en stl, de tous les lieux .
Pourquoi insert() se comporte-t-il différemment à la fin, par rapport à n'importe quel autre emplacement? Ou est-ce que j'ai fait quelque chose de mal?
23.2.1.3 dans la norme, pour quiconque se demande. – GManNickG
Quelles sont les autres opérations effectuées? Tout ce qui change la taille() de la deque, comme insérer, effacer, pop, pousser, redimensionner? Qu'en est-il de changer un élément quelque part dans la boucle, comme: * iter = 'z'; – Kache
Il varie d'un conteneur à l'autre. Pour un 'deque', toute insertion ou suppression au milieu de la séquence invalidera tous les itérateurs existants. Ajout ou suppression des extrémités ne sera pas. De plus, si vous faites beaucoup d'insertions au milieu de la séquence, vous feriez probablement mieux d'utiliser 'list' au lieu de' deque'. – coppro