Давайте снова сделаем случайным удобно!
Я составил хорошее решение только для заголовка C ++ 11.
Вы можете легко добавить один заголовочный файл в свой проект, а затем добавить свои тесты или использовать случайные строки для других целей.
Это краткое описание, но вы можете перейти по ссылке, чтобы проверить полный код. Основная часть решения находится в классе Randomer:
class Randomer {
// random seed by default
std::mt19937 gen_;
std::uniform_int_distribution<size_t> dist_;
public:
/* ... some convenience ctors ... */
Randomer(size_t min, size_t max, unsigned int seed = std::random_device{}())
: gen_{seed}, dist_{min, max} {
}
// if you want predictable numbers
void SetSeed(unsigned int seed) {
gen_.seed(seed);
}
size_t operator()() {
return dist_(gen_);
}
};
Randomer
инкапсулирует все случайные вещи, и вы можете легко добавить к ним свои собственные функции. После того, как у нас есть Randomer
, очень легко генерировать строки:
std::string GenerateString(size_t len) {
std::string str;
auto rand_char = [](){ return alphabet[randomer()]; };
std::generate_n(std::back_inserter(str), len, rand_char);
return str;
}
Напишите ваши предложения по улучшению ниже.
https://gist.github.com/VjGusev/e6da2cb4d4b0b531c1d009cd1f8904ad