random_suffle? - C++ - Programmation
Marsh Posté le 03-01-2005 à 10:36:21
faudrait voir à remettre ton itérateur 'i' au début de ta liste 'essai'
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'
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());
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++;
}
}