random_shuffle
它随机地重新排列范围内的元素[first,last)。
该函数将每个元素的值与一些其他随机选择的元素交换。提供时,函数gen确定在每种情况下都选择哪个元素。否则,该函数将使用一些未指定的随机性来源。
// CPP program Illustrating the
// use of random_shuffle
#include
using namespace std;
// random generator function
int randomfunc(int j)
{
return rand() % j;
}
int main()
{
srand(unsigned(time(0)));
vector arr;
// set some values:
for (int j = 1; j < 10; ++j)
// 1 2 3 4 5 6 7 8 9
arr.push_back(j);
// using built-in random generator
random_shuffle(arr.begin(), arr.end());
// using randomfunc
random_shuffle(arr.begin(), arr.end(), randomfunc);
// print out content:
cout << "arr contains:";
for (auto i = arr.begin(); i != arr.end(); ++i)
cout << ' ' << *i;
cout << endl;
return 0;
}
输出:
arr contains: 5 8 1 7 9 6 4 3 2
洗牌
使用g作为统一随机数生成器,随机重新排列[first,last)范围内的元素。
该函数将每个元素的值与其他随机选取的元素的值交换。该函数通过调用g()确定选择的元素。
// CPP program Illustrating
// the use of shuffle
#include
using namespace std;
// Driver Program
int main()
{
array s{ 1, 2, 3, 4, 5 };
// To obtain a time-based seed
unsigned seed = 0;
// Use of shuffle
shuffle(s.begin(), s.end(), default_random_engine(seed));
cout << "shuffled elements are:";
for (int& i : s)
cout << ' ' << i;
cout << endl;
return 0;
}
输出:
shuffled elements are: 3 1 5 4 2
shuffle和random_shuffle C++有什么区别?
- 唯一的区别是random_shuffle使用rand()函数对项进行随机化,而shuffle使用的urng是更好的随机生成器,尽管在random_shuffle特定的重载下,我们可以获得相同的行为(与shuffle一样)。
- 随机播放是对random_shuffle的改进,我们应该更喜欢使用前者以获得更好的结果。
- 同时使用两者交换变量的示例
随机洗牌:template (class RandomIt, class RandomFunc) void random_shuffle(RandomIt first, RandomIt last, RandomFunc&& r) { typename iterator_traits::difference_type i, n; n = last - first; for (i = n-1; i > 0; --i) { using std::swap; swap(first[i], first[r(i+1)]); } }
随机播放:
template void shuffle(RandomIt first, RandomIt last, UniformRandomBitGenerator&& g) { typedef typename iterator_traits::difference_type diff_t; typedef uniform_int_distribution distr_t; typedef typename distr_t::param_type param_t; distr_t D; diff_t n = last - first; for (diff_t i = n-1; i > 0; --i) { using swap; swap(first[i], first[D(g, param_t(0, i))]); } }
要从最佳影片策划和实践问题去学习,检查了C++基础课程为基础,以先进的C++和C++ STL课程基础加上STL。要完成从学习语言到DS Algo等的更多准备工作,请参阅“完整面试准备课程” 。