en C++, j'ai deux objets list<T>
A
et B
et je souhaite ajouter tous les membres de B
à la fin de A
. J'ai cherché différentes sources et je n'ai pas trouvé de solution simple (par exemple, A.append(B);
) et cela me surprend un peu.
Quelle est la meilleure façon de procéder?
En l'occurrence, je me fiche de B après cela (il est supprimé à la ligne suivante), donc s'il existe un moyen de tirer parti de cela pour de meilleurs résultats, cela m'intéresse également.
Si vous souhaitez ajouter des copies d’éléments en B, vous pouvez faire:
a.insert(a.end(), b.begin(), b.end());
Si vous voulez déplacer les éléments de B à la fin de A (vider B en même temps), vous pouvez faire:
a.splice(a.end(), b);
Dans votre cas, l’épissage serait préférable, car il s’agit simplement d’ajuster quelques pointeurs dans les listes chaînées.
un exemple en utilisant 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 ); }