Déplacer un élément de liste à la fin dans la STL
J'ai déjà le pointeur de liste de CDrawObject*
std::list<CDrawObject*> elements;
Comment je peux me déplacer un élément à la fin de la liste.
Je vois STL Algorithmes de Référence mais je ne trouve pas que cela opérations. Comment je peux faire?
- Pas à 100% pertinent avec votre question, mais êtes-vous sûr qu'une liste de pointeurs est raisonnable de structure de données choix? Il n'y a que quelques cas où je voudrais examiner la meilleure option...
- C'est quand ce qu'il fait est le déplacement d'un élément dans le milieu de la liste à la fin. la liste est la seule collection, dans laquelle la faire, c'est de la constante de temps.
- Ce moment, bien que constante, peut être encore plus long qu'il n'en faut pour
std::memmove()
le contenu d'unstd::vector
de conteneurs, en particulier lorsque des aspects tels que la localité des données (cache du PROCESSEUR) est pris en compte.
InformationsquelleAutor G-71 | 2011-02-06
Vous devez vous connecter pour publier un commentaire.
Utiliser la liste de la méthode splice()
void list::splice ( iterator position, list<T,Allocator>& x, iterator i );
Déplacer itérateur i à partir de la liste des x dans la liste actuelle à la position "position"
Ainsi de la déplacer à la fin mettre
(ils peuvent être tous les deux la même liste ou des listes différentes, aussi longtemps que la liste à partir de laquelle l'élément est déplacé a le même type, à la fois T et l'Allocateur)
iter
est déjà pointant vers le dernier élément est—il nécessaire de cas à qui?Un
std::list
est une liste à double liaison, ce qui signifie que vous n'avez pas accès aléatoire à l'élémentn
. Vousàpouvez supprimer l'élément, et ensuite utiliserpush_back
.remove
détruit l'objet, et il pourrait être non négligeable pour re-construire un nouveau.Le supprimer puis de les ajouter à votre liste.