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?
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);
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.