Est-il possible de random_shuffle un tableau de int éléments?
J'ai lu sur ce : http://www.cplusplus.com/reference/algorithm/random_shuffle/
et je me demandais si il est possible de random_shuffle un tableau de int éléments. C'est mon code
#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
int a[10]={1,2,3,4,5,6,7,8,9,10};
cout << a << endl << endl;
random_shuffle(a[0],a[9]);
cout<<a;
}
J'ai eu cette erreur:
error C2893: Failed to specialize function template
'iterator_traits<_Iter>::difference_type *std::_Dist_type(_Iter)'.
Mes question sont:
- Est-il possible de mélanger un int tableau à l'aide de
random_shuffle
. Si oui, je voudrais savoir comment le faire. - Est
random_shuffle
uniquement applicable aux modèles? - Ce que fait mon erreur signifie?
OriginalL'auteur Computernerd | 2013-02-06
Vous devez vous connecter pour publier un commentaire.
Vous avez besoin pour passer des pointeurs à
a[0]
eta[10]
, pas les éléments eux-mêmes:En C++11, vous pouvez utiliser
std::begin
etstd::end
:Les pointeurs sont en accès aléatoire itérateurs, et il prend deux itérateurs.
un autre qn: Cette méthode de mélange de tous les nombre quand il est appelé une fois, il n'existe aucune méthode qui échange 2 nombre qu'une seule fois quand on l'appelle??
@Computernerd,
std::swap
?Si vous avez besoin de changer un peu les chiffres pour obtenir une autre permutation aléatoire, vous pouvez appeler
next_permutation
. Il est souvent swaps de seulement deux éléments, mais peut échanger plus, ou pas du tout (auquel cas il revientfalse
).OriginalL'auteur dasblinkenlight
random_shuffle
prend des itérateurs, plutôt que des éléments. Essayez:ou
std::random_shuffle
peut être utilisé sur n'importe quelle paire de random access itérateurs, et mélange les éléments dans l'intervalle dénoté par ces itérateurs.L'erreur se produit car
int
s ne sont pas des itérateurs, et ainsi destd::random_shuffle
est incapable d'utiliser la donnéeint
s comme des itérateurs.OriginalL'auteur Mankarse
Essayez de remplacer
avec
À partir de: http://www.java2s.com/Code/Cpp/STL-Basics/Userandomshufflealgorithmswitharray.htm
OriginalL'auteur Theo20185
Travaillé pour moi de cette façon:
srand(time(0))
?OriginalL'auteur Renato Aloi
Simplement de changer l'arr d'un pointeur ne résout pas la solution. Cela permet de rendre le tableau de swap pour un type de permutation. Cela signifie que si vous exécutez à nouveau le programme, votre tableau sera mélangée dans l'exact la même manière comme il le faisait dans l'exécution précédente.
Pour résoudre ce - la fonction d'offre d'un troisième paramètre qui agit comme une graine. Donc la bonne mise en œuvre de la fonction est la suivante.
1) Ont une fonction ou d'un lamda qui génère un nombre aléatoire. Ce sera votre semence.
Assurez-vous que la semence de l'intérieur du générateur de nombres aléatoires.
2) Insérer cette fonction en tant que troisième arguement dans le random_shuffle appel de fonction.
Sera toujours aléatoire mélangées ensemble.
Assurez-vous d'inclure les éléments suivants:
OriginalL'auteur Grant Wilson