What is the difference between shuffle and random_shuffle c++

喜欢而已 提交于 2019-12-04 16:31:09

问题


The function std::shuffle has been introduced in C++11:

template< class RandomIt, class URNG >
void shuffle( RandomIt first, RandomIt last, URNG&& g );

and it has the same signature as one of the overloads of std::random_shuffle which was also introduced in C++11:

template< class RandomIt, class RandomFunc >
void random_shuffle( RandomIt first, RandomIt last, RandomFunc&& r );

The difference is in the third parameter where:

URNG must meet the requirements of UniformRandomNumberGenerator

Is this all? Is the difference just that shuffle performs an extra compile time check? Is the behavior otherwise the same?


回答1:


If you read the documentation at cppreference.com closely, you will find that the RandomFunc passed to random_shuffle has a different interface. It is invoked as r(n). This existed before C++11.

std::shuffle uses a standardized way of getting random numbers and invokes g(). This standardized random number generators where introduced with C++11 together with std::shuffle.




回答2:


std::random_shuffle uses std::rand() function to randomize the items, while the std::shuffle uses urng which is a better random generator, though with the particular overload of std::random_shuffle, you can get the same behavior (as with the std::shuffle) but that requires you to do some work to pass the third argument.

Watch this talk by Stephan T. Lavavej, in which he explains why std::rand is a bad function and what C++ programmers should use instead:

  • rand() Considered Harmful

The gist is, std::shuffle is an improvement over std::random_shuffle, and C++ programmers should prefer using the former.



来源:https://stackoverflow.com/questions/19219726/what-is-the-difference-between-shuffle-and-random-shuffle-c

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!