将[First, Last)区间中的元素次序打乱重新洗牌,使用你给定的随机数引擎_Func
使用一个均匀分布随机数产生器打乱[First, Last)区间内的元素次序
使用_RngFunc打乱[First, Last)区间内的元素次序.算法内部使用一个整数值来调用_RngFunc(max),返回一个大于0,小于max的随机数,不包括max本身
复杂度:线性,执行numElems-1次交换
使用例子:
template<typename T>
inline void INSERT_ELEMENTS(T& coll, int first, int last)
{
for (int i = first; i <= last; ++i)
{
coll.insert(coll.end(), i);
}
}
template<typename T>
inline void PRINT_ELEMENTS(const T & coll, const string& optcstr = "")
{
cout << optcstr;
for (auto elem : coll)
{
cout << elem << ' ';
}
cout << endl;
}
int main()
{
vector<int>a;
INSERT_ELEMENTS(a, 1, 9);
PRINT_ELEMENTS(a, "a: ");
random_shuffle(a.begin(), a.end());
PRINT_ELEMENTS(a, "shuffled: ");
sort(a.begin(), a.end());
PRINT_ELEMENTS(a, "sorted: ");
default_random_engine dre;
shuffle(a.begin(), a.end(), dre);
PRINT_ELEMENTS(a, "shuffled: ");
}
使用自定义的随机数生成器传给random_shuffle:
template<typename T>
inline void INSERT_ELEMENTS(T& coll, int first, int last)
{
for (int i = first; i <= last; ++i)
{
coll.insert(coll.end(), i);
}
}
template<typename T>
inline void PRINT_ELEMENTS(const T & coll, const string& optcstr = "")
{
cout << optcstr;
for (auto elem : coll)
{
cout << elem << ' ';
}
cout << endl;
}
class MyRandom
{
public:
ptrdiff_t operator()(ptrdiff_t max)
{
double tmp;
tmp = static_cast<double>(rand()) / static_cast<double>(RAND_MAX);
return static_cast<ptrdiff_t>(tmp * max);
}
};
int main()
{
vector<int>a;
INSERT_ELEMENTS(a, 1, 9);
PRINT_ELEMENTS(a, "a: ");
MyRandom rd;
random_shuffle(a.begin(), a.end(), rd);
PRINT_ELEMENTS(a, "shuffled: ");
}
今天的文章C++ STL变序型算法 对元素重新洗牌 shuffle、random_shuffle使用方法分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/33051.html