2013-06-09 2 views
-3

Мой код:Как я могу получить случайное значение в C++ 11

#include <iostream> 
#include <random> 

void main() 
{ 
    std::random_device rd; 

    std::cout << "Random value: " << rd() << std::endl; 

    system("pause"); 
} 

Как я получить результат rd(), и преобразовать его в std::string?

+2

'main' должен вернуть' int'. –

+0

Google, похоже, много помогает - http://en.cppreference.com/w/cpp/numeric/random/random_device – dchhetri

+0

main автоматически возвращает int в C++, Shafik. Нет особой необходимости, хотя это может быть хороший стиль. – Nathan

ответ

4

Поскольку вы спрашиваете, как преобразовать результат std::random_device в строку, а std::random_device возвращает unsigned int. C++ 11 предоставляет std::to_string, может использоваться для преобразования чисел в строки. См. here.

#include <iostream> 
#include <random> 
#include <string> 

int main() 
{ 

    std::random_device rd; 
    std::string str = std::to_string(rd()); 
    std::cout << str << std::endl; 

    return 0; 
} 
+0

Я получаю ошибку: 'tostring' не является членом 'std' 'с -std = gnu ++ 11 – Kevin

+0

это 'std :: to_string' –

+0

@Kevin опечатка' std :: to_string' уже корректна Это. –

0
#include <stdlib.h> 
#include <time.h> 

int main(){ 
    srand(time(NULL)); 
    unsigned int maxValue = 50; 
    std::cout << "Random value: " << rand()%maxValue; //random between 0-50 

    return 0; 
} 
1

Вот пример, который я нашел на http://en.academic.ru/dic.nsf/enwiki/11574016

#include <random> 
#include <functional> 

std::uniform_int_distribution<int> distribution(0, 99); 
std::mt19937 engine; // Mersenne twister MT19937 
auto generator = std::bind(distribution, engine); 
int random = generator(); // Generate a uniform integral variate between 0 and 99. 
int random2 = distribution(engine); // Generate another sample directly using the  distribution and the engine objects. 

Я не работал с ним раньше, но это может помочь вам начать работу.

1

std::stringstream является одним из способов преобразования числа в строку, код ниже показывает различные двигатели и распределение возможно. По умолчанию он равен Mersenne Twister для двигателя и normal distribution. Это хорошо reference для имеющихся вариантов:

#include <iostream> 
#include <iomanip> 
#include <string> 
#include <map> 
#include <random> 
#include <sstream> 

int main() 
{ 
    std::random_device rd; 

    // 
    // Engines 
    // 
    std::mt19937 e2(rd()); 
    //std::knuth_b e2(rd()); 
    //std::default_random_engine e2(rd()) ; 

    // 
    // Distribtuions 
    // 
    std::normal_distribution<> dist(2, 2); 
    //std::student_t_distribution<> dist(5); 
    //std::poisson_distribution<> dist(2); 
    //std::extreme_value_distribution<> dist(0,2); 

    std::stringstream s1 ; 

    s1 << dist(e2) ; 

    std::string str1 = s1.str(); 

    std::cout << str1 << std::endl ; 
} 

другой способ преобразовать в string будет использовать std::to_string:

str1 = std::to_string(dist(e2)) ; 
+0

Спасибо, у меня есть был решен вопрос :) –

Смежные вопросы