生成随机数,并保证在给定域之间覆盖所有
Generate random number and guaranteed to cover all between the given domain?
有人可以帮助我生成0-71之间的随机数,同时保证它将覆盖从0到71的所有数字?
我尝试了以下内容,但是有些数字似乎不止一次,有些根本不会出现。
int max= 71;
int min= 0;
std::random_device engine;
//initialise to -1 to make sure numbers are generated and stored properly
int randomNum = -1;
while(max> 0){
std::uniform_int_distribution<int> randomDistributed(min,max);
randomNum = randomDistrubuted(engine);
std::cout << randomNum << ", ";
max--;
}
更新:我打算生成随机数时提出了这个问题,以便我可以将自己的linkedlist数据结构的实现进行洗牌。我希望通过创建一个新列表并将元素(RandomNumber(元素添加到新的洗牌列表中来实现这一目标。如前所述,上面的代码实际上应该足以实现这一目标。
如果您已经为链接列表类编写了迭代器,则可以调整std::shuffle
的可能实现之一以在远期迭代器上操作。
#include <iostream>
#include <list>
#include <random>
#include <algorithm>
#include <iterator>
template<class ForwardIt, class URBG>
void list_shuffle(ForwardIt first, ForwardIt last, URBG&& g)
{
using diff_t = typename std::iterator_traits<ForwardIt>::difference_type ;
using distr_t = std::uniform_int_distribution<diff_t>;
using param_t = typename distr_t::param_type;
using std::iter_swap;
distr_t distr;
diff_t n = std::distance(first, last);
for (diff_t i = n - 1; i > 0; --i)
{
auto it = std::next(first, distr(g, param_t(0, i)));
iter_swap(first++, it);
}
}
int main()
{
std::random_device rd;
std::mt19937 g(rd());
std::list<int> a {1, 2, 3, 4, 5, 6, 7};
list_shuffle(a.begin(), a.end(), g);
for (auto const & i : a)
std::cout << ' ' << i;
std::cout << 'n';
}
但是,这将非常低效,因此您可能更喜欢将列表复制到向量,洗牌并从中重新创建列表。
此代码生成1000个随机数。标准函数srand((通过"种子"为rand((生成随机序列,将其作为参数。time((函数需要当前时间,因此每次序列都是唯一的。
#include <random>
#include <ctime>
#include <vector>
using std::vector;
int main() {
srand(time(0));
vector<int> v;
for (int i = 0, num = 0; i < 1000; ++i) {
num = rand()%72;
v.push_back(num);
}
}
相关文章:
- C++中std::resize(n)和std::shrink_to_fit之间的区别
- int(c) 和 c-'0' 之间的区别。C++
- 在cuda线程之间共享大量常量数据
- 使用ios:ate写入到流会覆盖现有文件
- 在c代码之间共享数据的最佳方式
- Mix_Init和Mix_OpenAudio SDL之间的区别是什么
- C++ 使用 assign 函数的字符串与直接使用 '=' 更改值的字符串之间的区别
- VSOMEIP-2个设备之间的通信(TCP/UDP)不工作
- std::atomic和std::condition_variable wait,notify_*方法之间的区别
- 大小相等但成员数量不同的结构之间的性能差异
- 类与私有变量的其他类之间的线程安全性
- 如何在cpp文件之间切换窗口?在Qt中
- 线程之间的布尔停止信号
- 我是C++编程的新手,这些代码之间有什么区别,我应该使用哪一个
- 在 const 函数中通过引用和指针返回之间的区别
- 我想知道长双倍和双倍之间的区别
- 如何防止clang格式在流运算符调用之间添加换行符<<
- 在两台机器之间进行时间戳的最佳c++chrono函数是什么
- 我可以重新分配/覆盖std::字符串吗
- 生成随机数,并保证在给定域之间覆盖所有