- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
函数std::shuffle已在 C++11 中引入:
template< class RandomIt, class URNG >
void shuffle( RandomIt first, RandomIt last, URNG&& g );
它与 std::random_shuffle 的重载之一具有相同的签名在 C++11 中也有介绍:
template< class RandomIt, class RandomFunc >
void random_shuffle( RandomIt first, RandomIt last, RandomFunc&& r );
区别在于第三个参数:
URNG must meet the requirements of UniformRandomNumberGenerator
就这些了吗?区别仅仅是 shuffle
执行额外的编译时间检查吗?其他行为是否相同?
最佳答案
std::random_shuffle
使用 std::rand()
函数来随机化项目,而 std::shuffle
使用 urng
是一个更好的随机生成器,尽管使用 std::random_shuffle
的特殊重载,您可以获得相同的行为(与 std::shuffle
) 但这需要你做一些工作来传递第三个参数。
观看 Stephan T. Lavavej 的演讲,他在其中解释了为什么 std::rand
是一个糟糕的函数以及 C++ 程序员应该改用什么:
要点是,std::shuffle
是对 std::random_shuffle
的改进,C++ 程序员应该更喜欢使用前者。
关于c++ - shuffle和random_shuffle c++有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19219726/
所以我有一个卡片 vector ,我正在尝试使用 random_shuffle 方法对其进行洗牌,但它并没有通过仅将第一项和最后一项传递给它来洗牌。所以我知道有第三个参数是自定义种子,它的东西,ran
我试图洗牌,但 random_shuffle 每次都产生相同的结果 void Deck::shuffle() { cout << "SHUFFLING CARDS!!!\n\n"; s
我正在测试 random_shuffle 函数模板,并能够在我的 MacBook 上生成不同的输出。但是,当我在我 friend 的 Windows 机器上尝试时,情况有所不同。 程序将尝试生成 5
以下对随机洗牌的调用始终为 vector v 提供相同的结果 #include #include #include #include using namespace std; int main
我在像这样的 vector 上使用 random_shuffle: #include vector deck; //some code to add cards to the deck here
我有一个 Blackjack 程序,它使用一个充满整数的 vector 来模拟一副纸牌: vector deck; 并用 1-10 填充它: for (int i=0; i<=4; ++i) // P
假设你需要指定范围内的随机数,传统的方法是使用ANSI C的函数random(),然后格式化结果以便结果是落在指定的范围内。但是,使用这个方法至少有两个缺点。 首先,做格式化时,结果常常是扭曲的,
我有一个包含 52 张牌的牌组向量,我想对其进行洗牌。 vector cards; 所以我用了这个: random_shuffle(cards.begin(), cards.end()); 问题是它每
我想在 C++ 中生成一个任意长度的随机数。 “合理任意”是指受主机速度和内存限制。 假设: 我想采样一个长度为 ceil(log10(MY_CUSTOM_RAND_MAX)) 的十进制数(以 10
我的任务是通过将长度为“n”的数组的每个排列“喂入”一次来测试排序算法。我应该用 random_shuffle 来做。 我知道 random_shuffle 服从均匀分布——也就是说,每个排列产生的机
这个问题在这里已经有了答案: Is random_shuffle threadsafe? and using rand_r if it is not (3 个答案) 关闭 9 年前。 在 C++11
请注意已接受的答案指出问题在于重新播种。重新播种不是原因。没有重新播种的测试在发布前产生了高相关性。见注释 1。 我在 R 中生成了 1,000,000 个均匀随机数,对序列进行排序,然后调用 std
如果标准库中的 random_shuffle 算法没有提供随机生成器函数,如果提供相同的数据,程序的连续运行会产生相同的随机序列吗? 例如,如果 std::random_shuffle(filenam
#include #include #include #include int main() { std::vector a(256); for (short x = 0; x
我正在使用带有自定义随机数生成器的 std::random_shuffle 函数,对于相同的种子,在所有编译器中返回相同的随机数序列。 但是,我担心 std::random_shuffle 可能不会在
这个问题在这里已经有了答案: 关闭9年前。 Possible Duplicate: How to make sure that std::random_shuffle always produces
我有一个来 self 创建的类的对象 vector ,每个对象包含 4 个变量:两个 double 、一个 int 和一个 bool。 int 被用作 ID 号,因此我可以跟踪 vector 中的哪个
我想使用 random_shuffle()来自 的函数, 但当我查看它时,结果发现它使用了 rand()在幕后。这可以用于洗牌吗?我的印象是 rand()不是很好的随机值来源,最好使用来自 的 M
我试图通过先将列表复制到 vector 然后返回到空列表来打乱列表。 vector tmpVector(agents_.size()); copy(agents_.begin(), agents_.e
我在没有包含的情况下写了这个并且它运行成功。srand 和 random_shuffle 在标准库中吗?是不是很奇怪? 链接 here 和 here说它们在算法库中。 #include #inclu
我是一名优秀的程序员,十分优秀!