0
votes

Quel est le conteneur adapté pour appuyer sur les valeurs sur le dessus, supprimer quelque index et éviter la réaffectation de la mémoire?

J'ai besoin de créer une sorte de pile là où je peux appuyer sur les valeurs sur le dessus: xxx pré>

que de les supprimer par la valeur, telle que la suppression de 3: P>

5 8    // (size 2)


3 commentaires

"meilleur" est une opinion. Utilisez std :: vecteur par défaut en C ++, jusqu'à ce que vous puissiez mesurer une différence.


@Lricheckhardt ma faute. Changé "meilleur" avec "adapté". Comme dit, je veux éviter la ré-allocation de la mémoire ...


de côté: vecteur :: arrière () pour récupérer le dernier élément


3 Réponses :


-2
votes

Si vous ne voulez pas que vous ne voulez pas réallocation de mémoire, vous pouvez également utiliser le conteneur de liste, c'est-à-dire une liste liée ..as il a la plupart des mêmes propriétés au vecteur. :)


2 commentaires

Liste attribue de manière dynamique chaque élément


Oui. Mais cela ne réaffecte pas la mémoire entière chaque fois que de nouveaux éléments sont ajoutés, c'est pourquoi ils ne stockent pas les données de manière contiguë



0
votes

Vous pouvez écrire un allocator contenant vos 32 valeurs et refuse d'allouer n'importe quelle quantité autre que 32 xxx

puis un std :: vecteur > aura des éléments sous forme de sous-observations.

Je ne pense pas qu'il soit possible d'éviter une allocation dynamique et d'avoir un accès aléatoire aléatoire subliné. < / p>


1 commentaires

Je pense qu'aucune réaffectation ne se passera de manière vectorielle sinon de sortir de la mémoire réservée Stackoverflow.com/a/5410129/365251 . Donc, je peux rester avec le vecteur, je pense ...



0
votes

Si la taille est limitée à 32 éléments Pourquoi ne pas utiliser de tampon circulaire de 32 éléments et de rouler les éléments quand ils sont 32? Il peut y avoir des bugs (n'utilisez pas le dernier () ou enlever () sur un conteneur vide, ne retirez pas un élément non inséré ...), mais cela fonctionne pour les fonctions que vous vouliez. Voici l'idée (le tas est évité)

pushing back 5...
5  
c.last == 5
pushing back 3...
5  3  
c.last == 3
pushing back 8...
5  3  8  
c.last == 8
erasing 3...
5  8  
c.last == 8


0 commentaires