Te sugerimos que revises esta resolución en un ambiente controlado antes de enviarlo a producción, saludos.
Solución:
Puede usar el algoritmo std::generate para llenar un vector de n elementos con números aleatorios.
En C++ moderno, se recomienda no usar semillas basadas en el tiempo ni std::rand, sino usar random_device para generar una semilla. Para el motor basado en software, siempre debe especificar el motor y la distribución. Lee mas..
#include
#include
#include
#include
#include
using namespace std;
int main()
// First create an instance of an engine.
random_device rnd_device;
// Specify the engine and distribution.
mt19937 mersenne_engine rnd_device(); // Generates random integers
uniform_int_distribution dist 1, 52;
auto gen = [&dist, &mersenne_engine]()
return dist(mersenne_engine);
;
vector vec(10);
generate(begin(vec), end(vec), gen);
// Optional
for (auto i : vec)
cout << i << " ";
Si desea reorganizar los elementos de un rango en un orden aleatorio:
std::shuffle(begin(vec), end(vec), mersenne_engine);
¿Qué tal simplemente:
#include
#include
#include
std::srand(unsigned(std::time(nullptr)));
std::vector v(1000);
std::generate(v.begin(), v.end(), std::rand);
Solo agrego mis 2 centavos... Esta respuesta es similar a la dada por Marko Tunjic, pero no usa std::rand
de C, pero las características de C ++ 11 en su lugar. Le permite utilizar la distribución de su elección, uniform_int_distribution
en el ejemplo siguiente.
#include
#include
#include
#include
#include
static std::vector generate_data(size_t size)
using value_type = int;
// We use static in order to instantiate the random engine
// and the distribution once only.
// It may provoke some thread-safety issues.
static std::uniform_int_distribution distribution(
std::numeric_limits::min(),
std::numeric_limits::max());
static std::default_random_engine generator;
std::vector data(size);
std::generate(data.begin(), data.end(), []() return distribution(generator); );
return data;
int main()
for (auto i = 0u; i < 5; ++i)
std::vector myVector = generate_data(10);
myVector = generate_data(10);
std::cout << "myVector (iteration " << i << "): ";
for (auto v: myVector)
std::cout << v << ",";
std::cout << "n";