Saltar al contenido

Rellenar un vector con números aleatorios c++

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";
    

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *