Valeur innatendue avec std::queue::front()
Bonjour!
Pour testes quelques petits truc j'ai écrit un petit prog:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
|
#include <glib.h>
class B;
class A
{
public:
/* constructeurs */
A();
virtual ~A();
protected:
/* Membres protégés */
B* m_pb;
}; |
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
|
#include <iostream>
#include <glib.h>
#include <queue>
class B
{
friend class A;
public:
B();
virtual ~B();
protected:
/* Membres protégés */
std::queue<int> m_qint;
/* Fonctions protégées */
bool _push(int);
void _affiche();
}; |
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| #include "CA.h"
#include "CB.h"
/* construct et destruct */
A::A():m_pb(new B)
{
char fin='n';
int i;
do{
std::cout<<"Entrez un entier (Attention aucun test d'erreur impléménté!!):";
std::cin>>i;
m_pb->_push(i);
std::cout<<"Voulez-vous continuer?(o/n):"<<std::endl;
std::cin>>fin;
}while(fin!='n' && fin!='N');
std::cout<<"Voulez-vous dépiler le conteneur?(o/n):";
std::cin>>fin;
if(fin=='o' || fin=='O')m_pb->_affiche();
}
A::~A(){} |
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| #include "CB.h"
/* construct et destruct */
B::B(){}
B::~B(){}
/* Fonctins protégées */
void B::_affiche()
{
while(m_qint.size())
{
std::cout<<"Message de B:\nTaille du conteneur: "<<m_qint.size();
std::cout<<"\nJe dépile mon conteneur:\t"<<m_qint.front()<<std::cout<<std::endl;
m_qint.pop();
}
}
/* Fonctions */
bool B::_push(int i)
{
m_qint.push(i);
return true;
} |
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| #include <iostream>
#include <queue>
#include "CA.h"
int main()
{
std::queue<int> q;
q.push(1);
q.push(2);
q.push(3);
while(q.size()){
std::cout<<"taile de q:"<<q.size()<<"\nelement:\t"<<q.front()<<std::endl;
q.pop();
}
A a;
return 0;
} |
Citation:
taile de q:3
element: 1
taile de q:2
element: 2
taile de q:1
element: 3
Entrez un entier (Attention aucun test d'erreur impléménté!!):1
Voulez-vous continuer?(o/n):
o
Entrez un entier (Attention aucun test d'erreur impléménté!!):2
Voulez-vous continuer?(o/n):
o
Entrez un entier (Attention aucun test d'erreur impléménté!!):3
Voulez-vous continuer?(o/n):
n
Voulez-vous dépiler le conteneur?(o/n):o
Message de B:
Taille du conteneur: 3
Je dépile mon conteneur: 10x604ca8
Message de B:
Taille du conteneur: 2
Je dépile mon conteneur: 20x604ca8
Message de B:
Taille du conteneur: 1
Je dépile mon conteneur: 30x604ca8
Press ENTER to continue.
Beaucoup de code pour pas grand chose, si ce n'est ce petit lièvre...
Quelle explication se cache derrière ces valeurs?