7
votes

La pile <> constructeur inverse la pile lors de l'initialisation d'une autre?

Voici le code: xxx

et voyons ensuite le résultat xxx

produit la sortie suivante: < pre> xxx

donc, ns stack est retourné s stack et NSS stack est identique à s pile.


6 commentaires

Ce n'est pas une question, n'est-ce pas? ;)


Demandez-vous une question ici? Il semble que vous postiez simplement une certaine conclusion. Fermeture.


@Kieren, @ODed: Je traite cela comme "Je vois quelque chose de bizarre, est-ce correct?" La question est dans le titre, le texte est pourquoi le Q est demandé.


@Richard, c'était une blague: ma question était rhétorique. Mauvaise blague je suppose!


@Kieren: OK, mais une personne qui pourrait facilement faire peur: actuellement, ce q a trois voix pour fermer comme "pas une vraie question".


Les gars, à cause de cela, j'ai perdu 10 $ dans une heure (je travaille sur le robot commercial), il était donc très vital pour moi de m'assurer.


3 Réponses :


15
votes

Le constructeur de pile qui prend un ienumerable pousse les éléments sur comme si ajoutez a été appelé plusieurs fois.

itération sur une pile iterate dans la commande "POP" ... Donc, lorsque vous construisez une pile d'une autre, il ajoutera d'abord le haut de la pile d'origine, puis mettra la "seconde de l'élément supérieur" sur le dessus de cela. Dans la nouvelle pile, etc ... l'inversant efficacement.


0 commentaires

3
votes

Le constructeur que vous utilisez pour NS an NSS est pile (iEnumerable ) . Lorsque vous énumérez une pile, il énumère de haut en bas. Mais lors de la création d'une pile, il pousse les éléments dans l'ordre énuméré. Donc, le dernier élément énuméré (dernier dans la source) sera top de la nouvelle pile.

Alors oui, il inverse l'ordre des éléments.


1 commentaires

Appeler ns = nouvelle pile (S.Reverse ()); rencontrerait l'attente implicite de l'OP.



3
votes

L'indice à votre surprise est dans votre question:

La pile <> constructeur inverse la pile lors de l'initialisation de autre ?

Le CTOR que vous parlez de pas accepter une autre pile - plutôt, il accepte un ienumerable . C'est-à-dire qu'il n'y a pas de traitement spécial pour la construction d'une pile à partir d'un pile , par rapport à la construction d'un pile de tout autre ienumerable .

Alors, lorsque vous essayez de construire un pile à partir d'une pile , la source pile est consommée dans son ordre de dénombrement naturel, c'est-à-dire l'ordre popping . Et la nouvelle pile est construite par poussant les éléments du document entrant ienumerable . D'où le comportement que vous voyez.


0 commentaires