suma repetir rango rand numeros llenar generar funcion entre dev con como arreglo aleatorios c++ algorithm shuffle

rango - numeros aleatorios en c++ sin repetir



¿Es posible aleatorizar una matriz de elementos int? (5)

Debe pasar los punteros a a[0] y a[10] , no a los elementos en sí:

random_shuffle(&a[0], &a[10]); // end must be 10, not 9

En C ++ 11, puedes usar std::begin y std::end :

random_shuffle(std::begin(a), std::end(a));

Estaba leyendo sobre esto: http://www.cplusplus.com/reference/algorithm/random_shuffle/ y me pregunté si es posible aleatorizar una matriz de elementos int. Este es mi codigo

#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; }

Tengo este error

error C2893: Failed to specialize function template ''iterator_traits<_Iter>::difference_type *std::_Dist_type(_Iter)''.

Mi pregunta es:

  1. ¿Es posible mezclar una matriz int usando random_shuffle ? Si es así, me gustaría aprender cómo hacerlo.

  2. ¿Es random_shuffle solo aplicable a las plantillas?

  3. ¿Qué significa mi error?


El simple hecho de cambiar la arr a un puntero no resuelve la solución. Esto hará que la matriz cambie a un tipo de permutación. Esto significa que si vuelve a ejecutar el programa, su matriz se mezclará de la misma manera que lo hizo en la ejecución anterior.

Para solucionar esto, la función ofrece un tercer parámetro que actúa como una semilla. Así que la correcta implementación de la función es la siguiente.

1) Tener una función o una lamda que genere un número aleatorio. Esto actuará como tu semilla.

int myrandom (int i) { return std::rand()%i;}

Asegúrese de establecer la semilla del generador interno de números aleatorios.

std::srand ( unsigned ( std::time(0) ) );

2) Inserte esta función como el tercer argumento en la llamada a la función random_shuffle.

std::random_shuffle ( myvector.begin(), myvector.end(), myrandom);

Esto dará como resultado una matriz aleatoria siempre aleatoria. Asegúrese de incluir lo siguiente:

#include <algorithm> // std::random_shuffle #include <vector> // std::vector #include <ctime> // std::time #include <cstdlib> // std::rand, std::srand


Trabajó para mí de esta manera:

#include <iostream> #include <algorithm> using namespace std; int main() { int a[10]={0,1,2,3,4,5,6,7,8,9}; for (unsigned i = 0; i < 10; i++) { cout << a[i]; } cout << endl; random_shuffle(&a[0],&a[10]); for (unsigned i = 0; i < 10; i++) { cout << a[i]; } cout << endl; }



random_shuffle toma iteradores, en lugar de elementos. Prueba cualquiera

std::random_shuffle(a, a + 10);

o

std::random_shuffle(std::begin(a), std::end(a));

std::random_shuffle se puede usar en cualquier par de iteradores de acceso aleatorio, y mezclará los elementos en el rango indicado por esos iteradores.

El error se produce porque los int s no son iteradores, por lo que std::random_shuffle no puede usar los int s dados como iteradores.