|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||||||
|
Futur Membre du Club
![]() Inscription : janvier 2011 Messages : 74 ![]() |
Bonjour tout le monde,
je dois réaliser une pile en c++ pour mon TP et je bloque au niveau de la méthode push, cette dernière doit empiler un element (entier e) et renvoyer son index dans la pile voilà ce que j'ai fais Stack.cpp Code :
Stack.hpp Code :
main.cpp Code :
3 5 0 135153 0 et si je met Stack s1(1) au lieu de 3, ça m'affiche 3 5 0 je pense que j'ai un problème au niveau du constructeur? Quelqu'un peut m'aider? Merci |
||||||
|
|
00
|
|
|
#2 |
|
Membre Expert
![]() ![]() |
Il y a plus de soucis avec ton code mais étant un débutant j'imagine que c'est moins important que la question qui nous concerne. Dans le constructeur:
Ici tu crées un seul et unique entier, pas un tableau, donc tous tes autres accçs mémoires sont en dehors de ton tableau la plupart du temps puisque ce n'en est pas un. Code :
container=new int[n]; // ou int[n](); pour les initialiser à 0 dés le départ Il se peut qu'il y en ai d'autres mais règle déjà ça et ça va t'aider. Vérifie que tu comprends bien la syntaxe de new aussi. |
|
|
10
|
|
|
#3 | |
|
Futur Membre du Club
![]() Inscription : janvier 2011 Messages : 74 ![]() |
Citation:
main.cpp main.cpp main.cpp |
|
|
|
00
|
|
|
#4 |
|
Membre Expert
![]() Junior developer C/C++/Embedded system Inscription : juin 2010 Messages : 656 ![]() |
Bonjour,
quelles modification as-tu faîtes pour qu'il ne compile plus ? La seule modification indiquée ci-dessus ne peut pas avoir cet effet. |
|
|
10
|
|
|
#5 | |
|
Futur Membre du Club
![]() Inscription : janvier 2011 Messages : 74 ![]() |
Citation:
Merci |
|
|
|
00
|
|
|
#6 |
|
Membre Expert
![]() ![]() |
D'abord, tu augmentes la size quand tu ajoutes un élément mais tu la mets dés le départ au maximum. Ce n'est pas logique du tout. Soit ta taille est celle maximale, soit c'est le nombre d'élément en cours, soit 0 au départ.
Dans tous les cas, ton problèem c'est que ta boucle qui affiche le contenu de ton array a de mauvaises informations (la size est n'importe quoi) et lis donc des données qui ne sont pas dans ton tableau. Bon courage. ![]() Corrige la logique de ton code, une fois fait je peux te montrer comment le faire en plus "safe". |
|
|
00
|
|
|
#7 | |
|
Futur Membre du Club
![]() Inscription : janvier 2011 Messages : 74 ![]() |
Citation:
C'est bon j'ai réglé le problème merci beaucoup, là je vais attaquer les autres fonctions, et si je bloque je te demande |
|
|
|
00
|
|
|
#8 |
|
Membre Expert
![]() ![]() |
Ok!
Mais je te préviens, ton code actuel est "dangereux". Un professionnel décent n'écrirais pas ça comme ça. Si tu veux je te fais un équivalent plus safe dés que j'ai quelques minutes. |
|
|
00
|
|
|
#9 |
|
Futur Membre du Club
![]() Inscription : janvier 2011 Messages : 74 ![]() |
|
|
|
00
|
|
|
#10 |
|
Membre expérimenté
![]() Léo GaspardLycéen Inscription : janvier 2012 Messages : 342 ![]() |
Un professionnel décent écrirait typedef std::stack<int> Stack; ...
|
|
|
00
|
|
|
#11 |
|
Membre éprouvé
![]() Eric Inscription : décembre 2010 Messages : 254 ![]() |
|
|
|
00
|
|
|
#12 |
|
Membre expérimenté
![]() Léo GaspardLycéen Inscription : janvier 2012 Messages : 342 ![]() |
Un exemple ? (Excepté si on parle de plus de contrôle sur la façon dont les données sont agencées : si on veut un B-tree p.ex, oui, il n'y en a pas, mais ça s'utilise comme une map. D'ailleurs, il doit sûrement y avoir un moyen d'en trouver un dans une bibliothèque !)
|
|
|
00
|
|
|
#13 |
|
Membre éprouvé
![]() Eric Inscription : décembre 2010 Messages : 254 ![]() |
|
|
|
10
|
|
|
#14 | |||||
|
Membre expérimenté
![]() Léo GaspardLycéen Inscription : janvier 2012 Messages : 342 ![]() |
Citation:
Si la structure est spécifique au métier d'un logiciel donné, elle n'a rien à faire dans la SL, en effet. Et, en général, les structures particulières (enfin, toutes celles que j'ai pu rencontrer dans ma vie professionnelle inexistante pour le moment) se résument plus ou moins à des choses du genre : Code :
Code :
Et, si il y a vraiment besoin d'objets métiers spécifiques, alors la qualité du code aura rarement besoin d'être idéale : ce serait un simple wrapper, donc pas de problème de new / delete. |
|||||
|
|
00
|
|
|
#15 |
|
Membre éprouvé
![]() Eric Inscription : décembre 2010 Messages : 254 ![]() |
Elle aura besoin d'être bien codée
1) en utilisant les structures standards comme blocs de base partout où on peut pour ne pas prendre le risque de mal recoder ce qui existe déjà 2) en faisant attention à la gestion mémoire (utiliser les smart pointers quand de l'allocation dynamique est nécessaire, minimiser au maximum l'utilisation de l'allocation dynamique...) Parce que tu ne dois pas laisser ta représentation des données devenir le maillon faible de ton programme et t'introduire des bugs ingérables... |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com