doublement de la taille d'un tableau C + +

  • Ponzzz
  • Born
  • Born
  • No Avatar
  • Inscription: Avr 02, 2010
  • Messages: 3
  • Status: Offline

Message Avril 2nd, 2010, 1:11 pm

J'ai une mission pour créer un tableau d'entiers qui se comporte comme une pile. tous mes push, pop fonctions fonctionnent parfaitement bien, mais im exécute un problème lorsque je tente de doubler la taille de mon tableau (ce qui arrive quand j'essaie de pousser sur une gamme complète). Voici le code que j'ai à ce jour...

De-tête du fichier:

Code: [ Select ]
class Stack
{
    public:
        int size, front, back;

        void createStack(int);
        void push(int);
        void extendSize();
        void printElements();
        int pop();
        int getSize();
        bool isEmpty();
        bool isFull();

    private:
        int* stackArray;
        int* newArray;

};
  1. class Stack
  2. {
  3.     public:
  4.         int size, front, back;
  5.         void createStack(int);
  6.         void push(int);
  7.         void extendSize();
  8.         void printElements();
  9.         int pop();
  10.         int getSize();
  11.         bool isEmpty();
  12.         bool isFull();
  13.     private:
  14.         int* stackArray;
  15.         int* newArray;
  16. };


La fonction im essayant de mettre en œuvre:
Code: [ Select ]
void Stack::extendSize()
{
    newArray = stackArray;
    stackArray = new int[size*2];
    stackArray = newArray;
    size *= 2;
}
  1. void Stack::extendSize()
  2. {
  3.     newArray = stackArray;
  4.     stackArray = new int[size*2];
  5.     stackArray = newArray;
  6.     size *= 2;
  7. }


extendSize () fonctionne mais quand je imprimer les éléments de la pile il ressemble à ceci:

Index 0 = 3
Index 1 = 3
Index 2 = 3
Index 3 = 3
Index 4 = 3
Index 5 = 3
Index 6 = 3
Index 7 = 3
Index 8 = 3
Index 9 = 3
Index 10 = 3
Index 11 = -1414812757
Index 12 = -1414812757
Index 13 = -17891602
Index 14 = 0
Index 15 = 0
Index 16 = 1522491621
Index 17 = 469763407
Index 18 = 5001472
Index 19 = 5000384

Les éléments à la fin ne sont pas mis à 0 alors j'ai fini par obtenir une corruption dans le tas. Un conseil?
  • Anonymous
  • Bot
  • No Avatar
  • Inscription: 25 Feb 2008
  • Messages: ?
  • Loc: Ozzuland
  • Status: Online

Message Avril 2nd, 2010, 1:11 pm

  • SpooF
  • ٩๏̯͡๏۶
  • Bronze Member
  • Avatar de l’utilisateur
  • Inscription: Mai 22, 2004
  • Messages: 3415
  • Loc: Richland, WA
  • Status: Offline

Message Avril 2nd, 2010, 2:16 pm

Je voudrais créer votre nouveau tableau, le traverser et d'initialiser toutes les valeurs à 0 et ensuite copier sur chaque valeur ou quelque chose de similaire.

Code: [ Select ]
void Stack::extendSize()
{
    newArray = new int[size*2];
    for(i=0;i<size*2;i++)
    {
      if(i<size)
      {
        newArray[i] = stackArray[i];
      }
      else
      {
        newArray[i] = 0;
      }
    
    stackArray = newArray;
    size *= 2;
}
  1. void Stack::extendSize()
  2. {
  3.     newArray = new int[size*2];
  4.     for(i=0;i<size*2;i++)
  5.     {
  6.       if(i<size)
  7.       {
  8.         newArray[i] = stackArray[i];
  9.       }
  10.       else
  11.       {
  12.         newArray[i] = 0;
  13.       }
  14.     
  15.     stackArray = newArray;
  16.     size *= 2;
  17. }
#define NULL (::rand() % 2)
  • Ponzzz
  • Born
  • Born
  • No Avatar
  • Inscription: Avr 02, 2010
  • Messages: 3
  • Status: Offline

Message Avril 2nd, 2010, 3:57 pm

ahh maintenant je vois comment ça fonctionne, j'ai vraiment savoir quoi faire maintenant. Merci beaucoup!

Afficher de l'information

  • Total des messages de ce sujet: 3 messages
  • Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 188 invités
  • Vous ne pouvez pas poster de nouveaux sujets
  • Vous ne pouvez pas répondre aux sujets
  • Vous ne pouvez pas éditer vos messages
  • Vous ne pouvez pas supprimer vos messages
  • Vous ne pouvez pas joindre des fichiers
 
 

© 2011 Unmelted, LLC. Ozzu® est une marque déposée de Unmelted, LLC