TEMPLATE DE VECTEUR AVEC TIRAGE ALEATOIRE (C++)

Messages postés
968
Date d'inscription
samedi 3 avril 2004
Statut
Membre
Dernière intervention
4 mars 2010
- - Dernière réponse : cs_Sunglasses
Messages postés
8
Date d'inscription
samedi 20 mai 2006
Statut
Membre
Dernière intervention
11 juillet 2008
- 29 févr. 2008 à 09:57
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/45855-template-de-vecteur-avec-tirage-aleatoire-c

Afficher la suite 
cs_juju12
Messages postés
968
Date d'inscription
samedi 3 avril 2004
Statut
Membre
Dernière intervention
4 mars 2010
4 -
A l'allocation dynamique de tableaux new _vect1[size] correspond l'opérateur libération de tableaux delete[] vect1.
cs_Sunglasses
Messages postés
8
Date d'inscription
samedi 20 mai 2006
Statut
Membre
Dernière intervention
11 juillet 2008
-
Merci, voilà qui est corrigé (ainsi - au passage - que la fonction de suppression qui ne vérifiait pas l'état de la classe, car il faut que l'on ne soit pas en cours de tirage pour modifier le vecteur).

Mais le "delete vect1" ne marche-t-il pas quand même ? en tout cas mon compilo l'accepte, et à l'exécution, on dirait que ça ne pose pas de problème. (ou alors une fuite de mémoire peut-être ?)
cs_exar
Messages postés
287
Date d'inscription
vendredi 5 décembre 2003
Statut
Membre
Dernière intervention
22 avril 2012
1 -
Plus court avedc la STL:

#ifndef __VECTORALEA_H__
#define __VECTORALEA_H__
#include <vector>
#include 
using namespace std;

template<class T>
class VectorAlea: public vector<T>{
public:
   T Alea();
};

template<class T>
T VectorAlea<T>::Alea(){
   VectorAlea<T> tmp=*this;
   random_shuffle(tmp.begin(), tmp.end());
   T ret=tmp.back();
   tmp.pop_back();
   *this=tmp;
   return ret;
}

#endif


Pour tester:
#include <cstdlib>
#include 
#include "vectoralea.h"

using namespace std;

int main(int argc, char *argv[])
{
    VectorAlea tst;
    for(int cnt=1; cnt<=10; cnt++)
      tst.push_back(cnt);
    for(int cnt=0; cnt<10; cnt++)
      cout<<tst.at(cnt)<<endl;
    cout<<"************************"<<endl;
    for(int cnt=0; cnt<10; cnt++)
      cout<<tst.Alea()<<endl;
    return EXIT_SUCCESS;
}


Sinon, code bien propre !
A+!

*********
«Asseyez-vous une heure près d’une jolie fille, cela passe comme une minute. Asseyez-vous une minute sur un poêle brûlant, et cela passe comme une heure. C’est cela la relativité.»

Albert Einstein.
cs_exar
Messages postés
287
Date d'inscription
vendredi 5 décembre 2003
Statut
Membre
Dernière intervention
22 avril 2012
1 -
Au fait, j'ai fait ça en deux minutes, il faut contrôler que le vecteur n'est pas vide avant de tenter de renvoyer une valeur...
Bon courage !

*********
«Asseyez-vous une heure près d'une jolie fille, cela passe comme une minute. Asseyez-vous une minute sur un poêle brûlant, et cela passe comme une heure. C'est cela la relativité.»

Albert Einstein.
cs_Sunglasses
Messages postés
8
Date d'inscription
samedi 20 mai 2006
Statut
Membre
Dernière intervention
11 juillet 2008
-
C'est sûr qu'on peut réutiliser ce qui existe déjà, mais je fais ça pour apprendre et pour m'entrainer (Et puis aussi parce que j'aime bien réinventer la roue, oui, je l'avoue :-) ).

Faudra que je m'intéresse de plus près à la STL.

En tout cas merci du commentaire !