106 votes

comment ajouter un objet list<T> à un autre

En C++, j'ai deux list<T> objets A y B et je souhaite ajouter tous les membres de la B jusqu'à la fin de A . J'ai cherché dans différentes sources et je n'ai pas trouvé de solution simple (par ex. A.append(B); ) et cela me surprend un peu.

Quelle est la meilleure façon de procéder ?

Il se trouve que je ne me soucie plus de B après cela (il est supprimé à la ligne suivante), donc s'il y a un moyen de tirer parti de cela pour améliorer la performance, cela m'intéresse aussi.

213voto

UncleBens Points 24580

Si vous souhaitez ajouter copies d'articles en B, vous pouvez le faire :

a.insert(a.end(), b.begin(), b.end());

Si vous voulez déplacer des éléments de B à la fin de A (en vidant B en même temps), vous pouvez le faire :

a.splice(a.end(), b);

Dans votre cas, il serait préférable de procéder à une épissage, puisqu'il s'agit simplement d'ajuster quelques pointeurs dans les listes chaînées.

8 votes

+1. C'est donc vrai. S'il avait été aussi facile et efficace de "découper" des cartes et des ensembles...

0 votes

L'une ou l'autre de ces opérations est-elle O(1) ?

2 votes

Je suppose que splice devrait être O(1) pour le cas ci-dessus.

-3voto

serup Points 1432

Un exemple d'utilisation de boost

std::list<T> A; // object A is a list containing T structure
std::list<T> B; // object B is a list containing T structure

// append list B to list A
BOOST_FOREACH(auto &listElement, B) { A.push_back( listElement ); }

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X