![]() |
#2
rjsp2018-11-19 15:01
|
目的:向vector的对象v中添加480个元素,前100个元素=10,v[99]-v.end()之间的元素都是0;
我的想法是利用shuffle随机打乱v中的元素,来实现地雷的位置随机

void Widget::initVector()
{
for(int i = 0; i < 480; i++)
{
if(i < 99)
v.push_back(10);
else
v.push_back(0);
}
std::random_device rd;
std::mt19937 g(rd());
std::shuffle(v.begin(), v.end(), g);
}
现在的问题是,这个函数每次的打乱序列都是一样的,如:
只有本站会员才能查看附件,请 登录
可以看到,地雷的位置随机成功了,但是每次运行程序,位置都是一样的。
查询https://zh.中的例子

#include <random>
#include <algorithm>
#include <iterator>
#include <iostream>
int main()
{
std::vector<int> v = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
std::random_device rd;
std::mt19937 g(rd());
std::shuffle(v.begin(), v.end(), g);
std::copy(v.begin(), v.end(), std::ostream_iterator<int>(std::cout, " "));
std::cout << "\n";
system("pause");
}
这段示例程序正常,为什么我的每次打乱后的顺序都是一样的?
cppreference上的说明有点看不懂,请帮我看看哪里有问题,还有关于shuffle的使用方法,谢谢!
[此贴子已经被作者于2018-11-19 14:16编辑过]