Existe-t-il un moyen simple d'ajouter un vecteur dans un autre vecteur, et de supprimer l'itérateur à la position d'insertion après (pratiquement itérateur "avec un nouveau vecteur)? Ce que je veux faire est (lire un commentaire dans le code):Insérer un vecteur C++ en "remplaçant" l'itérateur au point d'insertion (avec une complication)
struct Data
{
Data(int i) :d(i) {}
vector<Data> vec;
int d;
};
vector<Data> dataVector = { Data(1), Data(2), Data(3) };
dataVector[1].vec = { Data(41), Data(42) };
// Task: replace Data(2) in dataVector with dataVector[1].vec to get {Data(1),Data(41),Data(42),Data(3)};
for (auto it = dataVector.begin(); it != dataVector.end();) {
if ((*it).d == 2) {
it = dataVector.insert(it,(*it).vec.begin(),(*it).vec.end());
// Now delete Data(2) somehow
// it = dataVector.erase(...
}
else it++;
}
est là une façon élégante d'y parvenir sans incrémenter « it » n fois ou en utilisant des variables supplémentaires? En général, j'aurais des vecteurs de longueur arbitraire, et je préférerais ajouter le nouveau vecteur à la fin, mais ce n'est pas crucial.
Avez-vous essayé 'dataVector.insert (it, it-> vec.begin(), it-> vec.end()); it = dataVector.erase (it); '? – txtechhelp
Oui, mais l'itérateur est invalide après 'dataVector.insert (it, it-> vec.begin(), it-> vec.end())', donc vous devez obtenir le nouveau en obtenant la valeur de retour de insérer. Le problème est, que la valeur de retour est toujours un itérateur au début des données insérées – Camleon
Je viens de trouver une solution: 'it = dataVector.insert (it + 1, it-> vec.begin(), it-> vec .fin()); It = dataVector.erase (it-1); 'peut-être que ce n'est pas le meilleur, mais il semble fonctionner – Camleon