Quelle est la différence majeure entre un vecteur et une pile?
À la fois agir comme une pile. Les deux ont des push et pop opérations.
Est la différence dans la mémoire les mises en page?
source d'informationauteur Aquarius_Girl
Vous devez vous connecter pour publier un commentaire.
std::vector
a plusieurs accessibilité et les opérations de modification par rapport àstd::stack
. En cas destd::stack
vous pouvez avoir à effectuer des opérations de manière systématique, où vous pouvezpush()
ci-dessus le dernier élément oupop()
le dernier élément.std::vector
est plus souple en ce sens, où il dispose de plusieurs opérations, où vous pouvezinsert()
entre les deux, ouerase()
entre les deux.Le point principal est que, std::stack doit être fourni le conteneur sous-jacent. Par défaut, il
std::deque
mais il peut êtrestd::vector
oustd::list
trop.Sur l'autre main,
std::vector
est garanti d'être une ligne de tableau qui peut être consulté à l'aide deoperator []
.Je ne suis pas au courant de tous les détails de mise en œuvre, mais selon cettela pile est un conteneur de l'adaptateur. Elle fait en sorte que le conteneur sous-jacent, qui peut être un vecteur, liste ou deque, fonctionne comme une pile, c'est à dire uniquement permet de push et pop, et pas d'accès aléatoire.
Ainsi, un vecteur peut fonctionner comme une pile, mais une pile ne peut pas travailler comme un vecteur, parce que vous ne pouvez pas insérer ou de l'obtenir d'un élément à une position aléatoire.
stack
est une pile. Il ne peut push et pop. Unvector
pouvez faire d'autres choses, comme les insérer dans le milieu. Cela augmente la flexibilité, mais réduit de garanties.Par exemple, pour une pile, si vous appuyez sur A, puis B sur le dos alors vous avez la garantie qu'elles seront supprimées dans l'ordre B, puis A.
vector
ne garantit pas que.Pile est en fait un cas particulier de vecteur. Théoriquement parlant vecteur peut croître que vous le souhaitez. Vous pouvez supprimer des éléments de l'index dans un vecteur. Toutefois, dans le cas d'une pile, vous pouvez supprimer des éléments et de les insérer uniquement à son sommet (donc un cas particulier de vecteur).
En face dans de nombreuses bibliothèques qui fournissent une implémentation d'une pile, généralement, ils héritent de la classe vector/structures. Je ne suis pas sûr, mais je pense que la STL C++ (C++) - t-il.
Je pense que la principale différence est que le vecteur est une gamme de conteneurs. Il peut être utilisé facilement grâce à ses fonctions de membre de début et de fin. Vecteur peut être facilement lancé avec {} forme. Nous pouvons utiliser les nouvelles fonctionnalités de C++ moderne comme la gamme à base de boucles.
Alors qu'il n'est pas possible pour le std::stack.
Comme cplusplus.com suggère:
Le mot clé ici est seulementcomme dans les éléments sont seulement inséré et extrait à partir de l'une des extrémités du récipient.
Vous dire à la fois des vecteurs et des piles de loi comme les piles, mais ce n'est que partiellement vrai. Vecteurs peut agir comme les piles, mais ils peuvent aussi agir beaucoup, non pas comme des piles, en vous permettant de faire les choses comme les insérer à n'importe quel indice, d'accéder à tout élément, itérer sur l'ensemble de la structure, etc.
Piles de prendre un conteneur (comme, par exemple, un vecteur) et ne permettent pile comme les interactions avec elle. Effectivement cela garantit que toutes les interactions avec le conteneur va obéir à ce PRINCIPE: seul le dernier élément ajouté dans le conteneur pourra être consulté ou retiré.
Si vous voulez un récipient avec un comportement similaire à la pile, vous devez utiliser une pile si elle est particulièrement important pour vous qu'il s'agit exclusivement d'une pile. Vous devez utiliser un vecteur si vous voulez pile-comme le comportement, mais peut aussi envie de faire des choses comme faire une itération sur les éléments ou modifier des éléments dans l'arbitraire positions etc.