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_Sunglasses
Messages postés
8
Date d'inscription
samedi 20 mai 2006
Statut
Membre
Dernière intervention
11 juillet 2008
-
J'utilise déjà ma propre fonction random :-) (voir dans les fichiers rand.cpp et rand.hpp). C'est une petite bibliothèque de fonctions aléatoire qu'on nous avait fait faire en TP mais j'ai juste laissé la fonction dont j'avais besoin dans mon programme.

Merci !
cs_exar
Messages postés
287
Date d'inscription
vendredi 5 décembre 2003
Statut
Membre
Dernière intervention
22 avril 2012
1 -
Oui, c'est sur !
A noter que tu peux également utiliser ta propore fonction random.
Exemple:

#include
#include <functional>
#include <vector>

...

using namespace std;

ptrdiff_t random(prtdiff_t i){
return srand()%i;
}

ptrdiff_t (*prandom)(ptrdiff_t)=random;

int main(){
vector v;
// ici, on remplit le vecteur

// appel de random_shuffle
random_shuffle(v.begin(), v.end(), prandom);

...

}

Vraiment, je te conseille d t'intéresser à la STL, c'est très pratique !
Bonne continuation !
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 !
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_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.