web-dev-qa-db-fra.com

Supprimer les premiers n éléments d'un std :: vecteur

Je n'arrive pas à penser à une manière fiable (qui compacte également la mémoire) pour supprimer les premiers n éléments d'un std::vector. Comment allez-vous faire ça?

25
ForeverLearning

Depuis que vous mentionnez que vous souhaitez que vous souhaitiez compact de la mémoire, il serait préférable de tout copier sur un nouveau vecteur et d'utiliser l'idiome de swap.

std::vector<decltype(myvector)::value_type>(myvector.begin()+N, myvector.end()).swap(myvector);
37
Mark Ransom

Utilisez la méthode .erase():

// Remove the first N elements, and shift everything else down by N indices
myvec.erase(myvec.begin(), myvec.begin() + N);

Cela nécessitera de copier tous les éléments des indices n + 1 à la fin. Si vous avez un grand vecteur et que cela fera cela fréquemment, utilisez un std::deque Au lieu de cela, une implémentation plus efficace d'élimination des éléments de l'avant.

29
Adam Rosenfield