random_suffle?

random_suffle? - C++ - Programmation

Marsh Posté le 03-01-2005 à 10:19:13    

bonjour à tous, voici mon problème je voudrais mélanger une liste d'élément quelconque grâce à la fonction random-shuffle mais je n'y arrive pas est ce quelqu'un pourrait m'aider.
voici un exemple de programme qui se rapproche du mien
 
 
#include<iostream>
#include<algorithm>
#include<list>
#include<iterator>
 
using namespace std;
 
 
 
 
int main()
{
 
  list<int> essai;
  essai.push_front(1);
  essai.push_front(2);  
  essai.push_front(3);
  essai.push_front(4);
  essai.push_front(5);
 
  list<int>::iterator i = essai.begin();
  while(i != essai.end())
    {
      cout<<*i<<endl;
      i++;
    }
 
  random_shuffle(essai.begin() ,essai.end());
  while(i != essai.end())
    {
      cout<<*i<<endl;
      i++;
    }
 
}

Reply

Marsh Posté le 03-01-2005 à 10:19:13   

Reply

Marsh Posté le 03-01-2005 à 10:36:21    

faudrait voir à remettre ton itérateur 'i' au début de ta liste 'essai'

Reply

Marsh Posté le 03-01-2005 à 10:45:43    

j'ai essayé mais j'ai ca comme erreur
 
/usr/include/c++/3.3/bits/stl_algo.h: Dans function « void  
   std::random_shuffle(_RandomAccessIter, _RandomAccessIter) [with  
   _RandomAccessIter = std::_List_iterator<int, int&, int*>] »:
essai.cpp:30:   instantiated from here
/usr/include/c++/3.3/bits/stl_algo.h:1645: error: no match for 'operator+' in '
   __first + 1'
essai.cpp:30:   instantiated from here
/usr/include/c++/3.3/bits/stl_algo.h:1646: error: no match for 'operator-' in '
   __i - __first'
 
 

Reply

Marsh Posté le 03-01-2005 à 10:51:37    

ça c'est parce que std::list<> ne fournit pas de RandomAccessIterator. Il te faut utiliser un std::vector<>, au moins temporairement
 
  vector<int> temp(essai.begin(), essai.end());
  random_shuffle(temp.begin(), temp.end());
  essai = list<int>(temp.begin(), temp.end());

Reply

Marsh Posté le 03-01-2005 à 11:02:14    

merci ca fonctionne

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed